<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Project-42</title>
    <description>The latest articles on DEV Community by Project-42 (@project42).</description>
    <link>https://dev.to/project42</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F302509%2Fcaedf154-72d7-4bf3-b3d0-407e0c4af215.jpeg</url>
      <title>DEV Community: Project-42</title>
      <link>https://dev.to/project42</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/project42"/>
    <language>en</language>
    <item>
      <title>Swingbench in a Container: The Podman Way</title>
      <dc:creator>Project-42</dc:creator>
      <pubDate>Mon, 30 Mar 2026 11:21:43 +0000</pubDate>
      <link>https://dev.to/project42/swingbench-in-a-container-the-podman-way-4fe3</link>
      <guid>https://dev.to/project42/swingbench-in-a-container-the-podman-way-4fe3</guid>
      <description>&lt;p&gt;I wanted to start using podman closely to some tools I need to use for Oracle Databases, so I decided to start with Swingbench.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. Creating Container file&lt;/li&gt;
&lt;li&gt;2. Building the image locally&lt;/li&gt;
&lt;li&gt;3. Hosting multiple architecture packages in github&lt;/li&gt;
&lt;li&gt;4. Testing the images&lt;/li&gt;
&lt;li&gt;5. Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Creating Container file
&lt;/h2&gt;

&lt;p&gt;I won't say much about what Swingbench does, but as described by its creator "Swingbench is a free load generator (and benchmarks) designed to stress test an Oracle database (12c, 18c, 19c, 21c, 23c)" (good old times when we called it 23c :P)&lt;/p&gt;

&lt;p&gt;It can be downloaded &lt;a href="https://www.dominicgiles.com/downloads/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since the Dockerfile was created already (&lt;a href="https://github.com/domgiles/SwingbenchDocker/blob/master/Dockerfile" rel="noopener noreferrer"&gt;but long time ago &lt;/a&gt;) I did'nt have to do much more than modify the current URL for the tool and use a more updated openjdk release:&lt;/p&gt;

&lt;p&gt;Here is the Container file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Containerfile for swingbench&lt;/span&gt;
&lt;span class="c"&gt;# See www.dominicgiles.com/swingbench.html for further details&lt;/span&gt;
&lt;span class="c"&gt;# Based on Dockerfile:&lt;/span&gt;
&lt;span class="c"&gt;# https://github.com/domgiles/SwingbenchDocker/blob/master/Dockerfile&lt;/span&gt;
&lt;span class="c"&gt;# Updated to use 27-ea-slim&lt;/span&gt;

FROM docker.io/openjdk:27-ea-slim
&lt;span class="c"&gt;# Dockerfile for swingbench&lt;/span&gt;
&lt;span class="c"&gt;# See www.dominicgiles.com/swingbench.html for further details&lt;/span&gt;

RUN apt-get update &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; curl zip &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;mkdir &lt;/span&gt;app &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; curl &lt;span class="s2"&gt;"https://downloads.dominicgiles.com/swingbenchlatest.zip"&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; app/swingbench.zip

WORKDIR /app
RUN unzip swingbench.zip

ENV PATH &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;:/app/swingbench/bin"&lt;/span&gt;

WORKDIR /app/swingbench/bin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Building the image locally
&lt;/h2&gt;

&lt;p&gt;Once I have the Container file I can easily build the image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| server &lt;span class="k"&gt;in&lt;/span&gt; ~/pods &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git clone https://github.com/Project-42/SwingbenchContainer.git
Cloning into &lt;span class="s1"&gt;'SwingbenchContainer'&lt;/span&gt;...
remote: Enumerating objects: 12, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
remote: Counting objects: 100% &lt;span class="o"&gt;(&lt;/span&gt;12/12&lt;span class="o"&gt;)&lt;/span&gt;, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
remote: Compressing objects: 100% &lt;span class="o"&gt;(&lt;/span&gt;10/10&lt;span class="o"&gt;)&lt;/span&gt;, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
remote: Total 12 &lt;span class="o"&gt;(&lt;/span&gt;delta 2&lt;span class="o"&gt;)&lt;/span&gt;, reused 0 &lt;span class="o"&gt;(&lt;/span&gt;delta 0&lt;span class="o"&gt;)&lt;/span&gt;, pack-reused 0 &lt;span class="o"&gt;(&lt;/span&gt;from 0&lt;span class="o"&gt;)&lt;/span&gt;
Receiving objects: 100% &lt;span class="o"&gt;(&lt;/span&gt;12/12&lt;span class="o"&gt;)&lt;/span&gt;, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Resolving deltas: 100% &lt;span class="o"&gt;(&lt;/span&gt;2/2&lt;span class="o"&gt;)&lt;/span&gt;, &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| server &lt;span class="k"&gt;in&lt;/span&gt; ~/pods &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;SwingbenchContainer/

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| server &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/SwingbenchContainer &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lrth&lt;/span&gt;
total 8.0K
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; 1 solifugo solifugo 254 Mar 30 11:14 README.md
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; 1 solifugo solifugo 605 Mar 30 11:14 Containerfile

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| server &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/SwingbenchContainer &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman build &lt;span class="nt"&gt;--progress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;plain &lt;span class="nt"&gt;-t&lt;/span&gt; swingbench:v1 &lt;span class="nb"&gt;.&lt;/span&gt;
STEP 1/6: FROM docker.io/openjdk:27-ea-slim
Trying to pull docker.io/library/openjdk:27-ea-slim...
&lt;span class="o"&gt;[&lt;/span&gt;...]
STEP 6/6: WORKDIR /app/swingbench/bin
COMMIT swingbench:v1
&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 67b38a00415f
Successfully tagged localhost/swingbench:v1
67b38a00415f5ec84bec8587c22b33d9896dfae7ce075cc2be36877684727abd

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| server &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/SwingbenchContainer &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Hosting multiple architecture packages in github
&lt;/h2&gt;

&lt;p&gt;I wanted to go a step further and host the images in my github account for both AMD64 and ARM64 (for my rasperry pi testing)&lt;/p&gt;

&lt;p&gt;Login into the Repo using a token created for it (Go to GitHub Settings &amp;gt; Developer Settings &amp;gt; Personal Access Tokens (classic) and create a token with write:packages and delete:packages scopes.)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"*******"&lt;/span&gt; | podman login ghcr.io &lt;span class="nt"&gt;-u&lt;/span&gt; Project-42 &lt;span class="nt"&gt;--password-stdin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build and push the individual images (using unique tags):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Build for amd64&lt;/span&gt;
podman build &lt;span class="nt"&gt;--platform&lt;/span&gt; linux/amd64 &lt;span class="nt"&gt;-t&lt;/span&gt; ghcr.io/project-42/swingbench:amd64 &lt;span class="nb"&gt;.&lt;/span&gt;
podman push ghcr.io/project-42/swingbench:amd64

&lt;span class="c"&gt;# Build for arm64&lt;/span&gt;
podman build &lt;span class="nt"&gt;--platform&lt;/span&gt; linux/arm64 &lt;span class="nt"&gt;-t&lt;/span&gt; ghcr.io/project-42/swingbench:arm64 &lt;span class="nb"&gt;.&lt;/span&gt;
podman push ghcr.io/project-42/swingbench:arm64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the "Global" Manifest:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create an empty list&lt;/span&gt;
podman manifest create ghcr.io/project-42/swingbench:latest

&lt;span class="c"&gt;# Add both specific versions to that list&lt;/span&gt;
podman manifest add ghcr.io/project-42/swingbench:latest docker://ghcr.io/project-42/swingbench:amd64
podman manifest add ghcr.io/project-42/swingbench:latest docker://ghcr.io/project-42/swingbench:arm64

&lt;span class="c"&gt;# Push the manifest to GitHub&lt;/span&gt;
podman manifest push ghcr.io/project-42/swingbench:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Testing the images
&lt;/h2&gt;

&lt;p&gt;Now, I should be able to do testing from the server or raspi systems calling the latest tag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| server &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman run &lt;span class="nt"&gt;--name&lt;/span&gt; swingbench &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; ghcr.io/project-42/swingbench:latest  &lt;span class="se"&gt;\&lt;/span&gt;
oewizard &lt;span class="nt"&gt;-cl&lt;/span&gt; &lt;span class="nt"&gt;-create&lt;/span&gt; &lt;span class="nt"&gt;-cs&lt;/span&gt; rac1-scan:1521/PDB191 &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-u&lt;/span&gt; soe &lt;span class="nt"&gt;-p&lt;/span&gt; soe &lt;span class="nt"&gt;-dba&lt;/span&gt; &lt;span class="s2"&gt;"sys as sysdba"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-dbap&lt;/span&gt; &lt;span class="k"&gt;*****&lt;/span&gt; &lt;span class="nt"&gt;-ts&lt;/span&gt; ts_swingbench
Getting image &lt;span class="nb"&gt;source &lt;/span&gt;signatures
Copying blob 421bb5d6c5ea skipped: already exists
&lt;span class="o"&gt;[&lt;/span&gt;...]
Copying blob 7284c4b5e434 skipped: already exists
Copying config 67b38a0041 &lt;span class="k"&gt;done&lt;/span&gt;   |
Writing manifest to image destination
SwingBench Wizard
Author  :   Dominic Giles
Version :   2.8.0.1630

Running &lt;span class="k"&gt;in &lt;/span&gt;Lights Out Mode using config file : ../wizardconfigs/oewizard.xml

Data Generation Runtime Metrics
+-------------------------+-------------+
| Description             | Value       |
+-------------------------+-------------+
| Connection Time         | 0:00:00.008 |
| Data Generation Time    | 0:01:47.040 |
| DDL Creation Time       | 0:02:05.722 |
| Total Run Time          | 0:03:52.777 |
| Rows Inserted per sec   | 148,213     |
| Actual Rows Generated   | 15,887,043  |
| Commits Completed       | 995         |
| Batch Updates Completed | 79,631      |
+-------------------------+-------------+

Validation Report
The schema appears to have been created successfully.

Valid Objects
Valid Tables : &lt;span class="s1"&gt;'ORDERS'&lt;/span&gt;,&lt;span class="s1"&gt;'ORDER_ITEMS'&lt;/span&gt;,&lt;span class="s1"&gt;'CUSTOMERS'&lt;/span&gt;,
&lt;span class="o"&gt;[&lt;/span&gt;...]
Valid Sequences : &lt;span class="s1"&gt;'CUSTOMER_SEQ'&lt;/span&gt;,&lt;span class="s1"&gt;'ORDERS_SEQ'&lt;/span&gt;,&lt;span class="s1"&gt;'ADDRESS_SEQ'&lt;/span&gt;,&lt;span class="s1"&gt;'LOGON_SEQ'&lt;/span&gt;,&lt;span class="s1"&gt;'CARD_DETAILS_SEQ'&lt;/span&gt;
Valid Code : &lt;span class="s1"&gt;'ORDERENTRY'&lt;/span&gt;
Schema Created

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| server &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;


&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman run &lt;span class="nt"&gt;--name&lt;/span&gt; swingbench &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; ghcr.io/project-42/swingbench:latest  &lt;span class="se"&gt;\&lt;/span&gt;
charbench &lt;span class="nt"&gt;-u&lt;/span&gt; soe &lt;span class="nt"&gt;-p&lt;/span&gt; soe &lt;span class="nt"&gt;-cs&lt;/span&gt; rac1-scan:1521/PDB191 &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-c&lt;/span&gt; ../configs/SOE_Server_Side_V2.xml &lt;span class="nt"&gt;-mr&lt;/span&gt;
Trying to pull ghcr.io/project-42/swingbench:latest...
Getting image &lt;span class="nb"&gt;source &lt;/span&gt;signatures
Copying blob 133e58ac4e38 skipped: already exists
Copying blob 4f9e06383f5c skipped: already exists
Copying blob 65f7d2377e3d skipped: already exists
Copying blob 39f3ff148085 skipped: already exists
Copying blob 780ee5cf234b skipped: already exists
Copying config 7158508bcb &lt;span class="k"&gt;done&lt;/span&gt;   |
Writing manifest to image destination
Swingbench
Author  :    Dominic Giles
Version :    2.8.0.1630

Results will be written to results.xml
Hit Return to Terminate Run...

Time        Users   TPM TPS

10:42:42 AM     16      26108   640
&lt;span class="nt"&gt;---------------------------------------------------------------&lt;/span&gt;
|Results of Charbench Run                                     |
&lt;span class="nt"&gt;---------------------------------------------------------------&lt;/span&gt;
|Benchmark Name                |Order Entry benchmark using serverside plsql Version 2|
|Time of Run                   |     Mar 30, 2026, 10:41:55 AM|
|Length of Benchmark           |                       0:00:48|
|Total Logon Time              |                       0:00:01|
|Total Completed Transactions  |                         26910|
|Total Failed Transactions     |                             0|
|Maximum Transactions/min      |                         26811|
|Average Transactions/sec      |                        560.62|
|Total Select Statements       |                        286419|
|Total Insert Statements       |                         49577|
|Total Update Statements       |                         37317|
|Total Delete Statements       |                             0|
|Total Commit Statements       |                         27126|
|Total Rollback Statements     |                             0|

&lt;span class="o"&gt;[&lt;/span&gt;...]

|Transaction :  Browse Orders                                 |
&lt;span class="nt"&gt;---------------------------------------------------------------&lt;/span&gt;
|Minimum Response Time         |                             3|
|Maximum Response Time         |                           468|
|Average Response Time         |                         19.39|
|Geometric Mean Response Time  |                         16.20|
|Median Response Time          |                         16.05|
|Number of Transactions        |                          1068|
|Failed Transactions           |                             0|
|Rolled Back Transactions      |                             0|
&lt;span class="nt"&gt;---------------------------------------------------------------&lt;/span&gt;
Saved results to results.xml
Completed Run.
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman run &lt;span class="nt"&gt;--name&lt;/span&gt; swingbench &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; ghcr.io/project-42/swingbench:latest  &lt;span class="se"&gt;\&lt;/span&gt;
sbutil &lt;span class="nt"&gt;-u&lt;/span&gt; soe &lt;span class="nt"&gt;-p&lt;/span&gt; soe  &lt;span class="nt"&gt;-cs&lt;/span&gt; rac1-scan:1521/PDB191 &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-soe&lt;/span&gt; parallel 12 &lt;span class="nt"&gt;-dup&lt;/span&gt; 1
Getting table Info
Got table information. Completed &lt;span class="k"&gt;in&lt;/span&gt; : 0:00:04.618
&lt;span class="o"&gt;[&lt;/span&gt;...]
Determining New Row Counts
Got New Row Counts. Completed &lt;span class="k"&gt;in&lt;/span&gt; : 0:00:06.011
+--------------+--------------------+---------------+---------------+----------+
| Table Name   | Original Row Count | Original Size | New Row Count | New Size |
+--------------+--------------------+---------------+---------------+----------+
| ORDER_ITEMS  | 7,201,293          | 530 MB        | 7,201,293     | 555 MB   |
| CUSTOMERS    | 1,003,372          | 153 MB        | 1,003,372     | 163 MB   |
| CARD_DETAILS | 1,503,372          | 94 MB         | 1,503,372     | 101 MB   |
| ORDERS       | 1,438,803          | 202 MB        | 1,438,803     | 213 MB   |
| INVENTORIES  | 897,112            | 175 MB        | 897,112       | 186 MB   |
| ADDRESSES    | 1,503,709          | 138 MB        | 1,503,709     | 143 MB   |
| Total        |                    | 1.3 GB        |               | 1.3 GB   |
+--------------+--------------------+---------------+---------------+----------+

Completeted duplication &lt;span class="k"&gt;for &lt;/span&gt;the order entry schema

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Conclusion
&lt;/h2&gt;

&lt;p&gt;To be honest, not sure how much I would use it in real environment, but I can see systems where you may have access to use containers and can create your swingbench image in your organization repository so you can use from any box.&lt;/p&gt;

&lt;p&gt;In any case, if you want to give it a go, check it out here, and remember to check the original website for more updates and how to use it&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Project-42/SwingbenchContainer" rel="noopener noreferrer"&gt;https://github.com/Project-42/SwingbenchContainer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/users/Project-42/packages/container/package/swingbench" rel="noopener noreferrer"&gt;https://github.com/users/Project-42/packages/container/package/swingbench&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="//www.dominicgiles.com/swingbench.html"&gt;www.dominicgiles.com/swingbench.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>podman</category>
      <category>tutorial</category>
      <category>oracle</category>
    </item>
    <item>
      <title>How to Monitor Root and User-Level Podman Containers with Grafana</title>
      <dc:creator>Project-42</dc:creator>
      <pubDate>Wed, 11 Mar 2026 10:43:55 +0000</pubDate>
      <link>https://dev.to/project42/how-to-monitor-root-and-user-level-podman-containers-with-grafana-1d0</link>
      <guid>https://dev.to/project42/how-to-monitor-root-and-user-level-podman-containers-with-grafana-1d0</guid>
      <description>&lt;p&gt;I wanted to give it a try to Grafana (again) and in this case, to make sure I can monitor podman containers running from different user namespaces&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. podman-exporter Containers&lt;/li&gt;
&lt;li&gt;2. Prometheus Container&lt;/li&gt;
&lt;li&gt;3. Grafana Container&lt;/li&gt;
&lt;li&gt;4. Deployment&lt;/li&gt;
&lt;li&gt;
5. Adding a Dashboard to Grafana

&lt;ul&gt;
&lt;li&gt;5.1 Login into Grafana&lt;/li&gt;
&lt;li&gt;5.2 Add the Prometheus connection&lt;/li&gt;
&lt;li&gt;5.3 Import the Monitoring Dashboard&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. podman-exporter Containers
&lt;/h2&gt;

&lt;p&gt;To extract the information from the podman containers, will be using 2 different podman-exporter Containers. One for the root podman containers and another one for the user solifugo (uid 1001)&lt;/p&gt;

&lt;p&gt;First, create the quadlet files.&lt;br&gt;
podman-exporter needs high privileges to "see" into other containers.&lt;br&gt;
Note the Volume paths specific to Podman.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/containers/systemd/podman-exporter.container
&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Podman Prometheus Exporter
&lt;span class="nv"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;network-online.target

&lt;span class="o"&gt;[&lt;/span&gt;Container]
&lt;span class="nv"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;quay.io/navidys/prometheus-podman-exporter:latest
&lt;span class="nv"&gt;ContainerName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;podman-exporter
&lt;span class="nv"&gt;Network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;host
&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;CONTAINER_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;unix:///run/podman/podman.sock
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/run/podman/podman.sock:/run/podman/podman.sock:ro
&lt;span class="nv"&gt;User&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0
&lt;span class="nv"&gt;Group&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0

&lt;span class="o"&gt;[&lt;/span&gt;Install]
&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target default.target

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To monitor the containers from solifugo user (uid 1001) we setup a second container podman-exporter&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/containers/systemd/podman-exporter-user1001.container
&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Podman Prometheus Exporter &lt;span class="k"&gt;for &lt;/span&gt;User 1001
&lt;span class="nv"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;network-online.target

&lt;span class="o"&gt;[&lt;/span&gt;Container]
&lt;span class="nv"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;quay.io/navidys/prometheus-podman-exporter:latest
&lt;span class="nv"&gt;ContainerName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;podman-exporter-user1001
&lt;span class="nv"&gt;Network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;host
&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/solifugo
&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;CONTAINER_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;unix:///run/user/1001/podman/podman.sock
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/run/user/1001/podman/podman.sock:/run/user/1001/podman/podman.sock:ro
&lt;span class="nv"&gt;Mount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tmpfs,tmpfs-size&lt;span class="o"&gt;=&lt;/span&gt;64M,destination&lt;span class="o"&gt;=&lt;/span&gt;/home/solifugo
&lt;span class="nv"&gt;User&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1001
&lt;span class="nv"&gt;Group&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1001
&lt;span class="nv"&gt;Exec&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;--web&lt;/span&gt;.listen-address&lt;span class="o"&gt;=&lt;/span&gt;:9455

&lt;span class="o"&gt;[&lt;/span&gt;Install]
&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target default.target

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Prometheus Container
&lt;/h2&gt;

&lt;p&gt;Now we can create the prometheus deployment.&lt;br&gt;
First, create your prometheus.yml on the host&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /home/solifugo/pods/prometheus/prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: &lt;span class="s1"&gt;'podman-exporter'&lt;/span&gt;
    static_configs:
      - targets: &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'localhost:9882'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;

  - job_name: &lt;span class="s1"&gt;'podman-user1001'&lt;/span&gt;
    static_configs:
      - targets: &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'localhost:9455'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the quadlet file making sure we add the yml file as part as a volume&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/containers/systemd/prometheus.container
&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Prometheus Metrics Collector
&lt;span class="nv"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;network-online.target

&lt;span class="o"&gt;[&lt;/span&gt;Container]
&lt;span class="nv"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker.io/prom/prometheus:latest
&lt;span class="nv"&gt;ContainerName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;prometheus
&lt;span class="nv"&gt;Network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;host
&lt;span class="nv"&gt;User&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1001
&lt;span class="nv"&gt;PublishPort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;9090:9090
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/solifugo/pods/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/solifugo/pods/prometheus/data:/prometheus

&lt;span class="o"&gt;[&lt;/span&gt;Install]
&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target default.target

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Grafana Container
&lt;/h2&gt;

&lt;p&gt;We can create now the Grfana deployment&lt;br&gt;
This is the quadlet file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /etc/containers/systemd/grafana.container
&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Grafana Dashboard
&lt;span class="c"&gt;# 'After' ensures they start in the right order&lt;/span&gt;
&lt;span class="nv"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;prometheus.service podman-exporter.service podman-exporter-user1001.service
&lt;span class="c"&gt;# 'Requires' ensures if they fail or stop, Grafana knows it's missing its heart&lt;/span&gt;
&lt;span class="nv"&gt;Requires&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;prometheus.service podman-exporter.service podman-exporter-user1001.service

&lt;span class="o"&gt;[&lt;/span&gt;Container]
&lt;span class="nv"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;grafana/grafana:latest
&lt;span class="nv"&gt;ContainerName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;grafana
&lt;span class="nv"&gt;Network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;host
&lt;span class="nv"&gt;PublishPort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3000:3000
&lt;span class="c"&gt;#Access to the volume as user solifugo/1001&lt;/span&gt;
&lt;span class="nv"&gt;User&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1001
&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;GF_SECURITY_ADMIN_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yoursecurepassword
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/solifugo/pods/grafana:/var/lib/grafana

&lt;span class="o"&gt;[&lt;/span&gt;Install]
&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target default.target

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Deployment
&lt;/h2&gt;

&lt;p&gt;Once the files are in &lt;em&gt;/etc/containers/systemd/&lt;/em&gt; we can reload the systemd daemon and start the stack by starting grafana (Because of the dependencies &lt;em&gt;After=&lt;/em&gt;, this will pull in Prometheus and the Network automatically):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl daemon-reload
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart grafana
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should be able to see the targets from the prometheus interface&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz3k3sdr0b6gnf7hi4oag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz3k3sdr0b6gnf7hi4oag.png" alt="00 Prometheus targets" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Adding a Dashboard to Grafana
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 Login into Grafana
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Log in with admin and the password you set.
Open Grafana in your browser (http://:3000).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvxk6s1wb77oj31h4xuuc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvxk6s1wb77oj31h4xuuc.png" alt="01 Grafana Login" width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Add the Prometheus connection
&lt;/h3&gt;

&lt;p&gt;Click the Menu (hamburger icon) &amp;gt; Connections &amp;gt; Data Sources.&lt;/p&gt;

&lt;p&gt;Click Add data source and select Prometheus.&lt;/p&gt;

&lt;p&gt;In the Connection URL field:&lt;/p&gt;

&lt;p&gt;If using Host Networking: Enter &lt;a href="http://localhost:9090" rel="noopener noreferrer"&gt;http://localhost:9090&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Scroll to the bottom and click Save &amp;amp; test. You should see a green checkmark saying "Data source is working."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnh1xa4x9no1qz4f2lcls.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnh1xa4x9no1qz4f2lcls.gif" alt="02 Grafana New Connection" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 Import the Monitoring Dashboard
&lt;/h3&gt;

&lt;p&gt;Click the Menu &amp;gt; Dashboards.&lt;/p&gt;

&lt;p&gt;Click New &amp;gt; Import.&lt;/p&gt;

&lt;p&gt;ID: 21559 (Podman Exporter Dashboard) – A dashboard that uses the exact same metrics the exporter is currently providing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuk2q8j5a4s56kyz5vkic.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuk2q8j5a4s56kyz5vkic.gif" alt="03 Grafana Import Dashboard" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And &lt;strong&gt;&lt;em&gt;voila!&lt;/em&gt;&lt;/strong&gt;, we got all of the containers visible:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hoxclzuoo7rly5rahcj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hoxclzuoo7rly5rahcj.gif" alt="05 Grafana Dashboard Working Video" width="720" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>grafana</category>
      <category>podman</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>Lightweight Container Monitoring: Setting up Beszel on Podman</title>
      <dc:creator>Project-42</dc:creator>
      <pubDate>Mon, 02 Mar 2026 10:10:22 +0000</pubDate>
      <link>https://dev.to/project42/lightweight-container-monitoring-setting-up-beszel-on-podman-3p71</link>
      <guid>https://dev.to/project42/lightweight-container-monitoring-setting-up-beszel-on-podman-3p71</guid>
      <description>&lt;p&gt;I have recently discovered a nice and lightweight monitoring tool that give you an overview of podman container status, so decided to give it a try&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. Beszel hub deployment&lt;/li&gt;
&lt;li&gt;2. Beszel agent deployment (local)&lt;/li&gt;
&lt;li&gt;3. Beszel agent deployment (remote)&lt;/li&gt;
&lt;li&gt;4. Additional Details&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Beszel hub deployment
&lt;/h2&gt;

&lt;p&gt;Create volumes folder destination and quadlet file for the beszel_hub&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /home/solifugo/pods/beszel/beszel_data
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /home/solifugo/pods/beszel/beszel_socket
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.config/containers/systemd/beszel_hub.container
&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;beszel hub

&lt;span class="o"&gt;[&lt;/span&gt;Container]
&lt;span class="nv"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker.io/henrygd/beszel
&lt;span class="nv"&gt;ContainerName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;beszel_hub
&lt;span class="nv"&gt;AutoUpdate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;registry
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/solifugo/pods/beszel/beszel_data:/beszel_data
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/solifugo/pods/beszel/beszel_socket:/beszel_socket
&lt;span class="nv"&gt;PublishPort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8090:8090

&lt;span class="o"&gt;[&lt;/span&gt;Service]
&lt;span class="nv"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;unless-stopped

&lt;span class="o"&gt;[&lt;/span&gt;Install]
&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target default.target

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We need to start &lt;em&gt;beszel_hub&lt;/em&gt; in order to create the Admin user and capture some details for the Agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; daemon-reload
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; start beszel_hub.service
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman ps
CONTAINER ID  IMAGE                             COMMAND               CREATED         STATUS                   PORTS                   NAMES
641ede03f72a  docker.io/henrygd/beszel:latest   serve &lt;span class="nt"&gt;--http&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0....  3 minutes ago   Up 3 minutes             0.0.0.0:8090-&amp;gt;8090/tcp  beszel_hub
c01b90706e13  docker.io/library/mariadb:latest  &lt;span class="nt"&gt;--default-authent&lt;/span&gt;...  24 seconds ago  Up 24 seconds            0.0.0.0:3306-&amp;gt;3306/tcp  mariadb
d03052aaf5b5  localhost:5000/p42_wordpress:v1   apache2-foregroun...  24 seconds ago  Up 23 seconds &lt;span class="o"&gt;(&lt;/span&gt;healthy&lt;span class="o"&gt;)&lt;/span&gt;  0.0.0.0:8042-&amp;gt;80/tcp    systemd-wordpress

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once we have entered the system, select &lt;em&gt;"+ Add System"&lt;/em&gt; and we add the name of the monitored system and in this case, since the agent is local to the hub, we will add &lt;em&gt;/beszel_socket/beszel.sock&lt;/em&gt; to the &lt;em&gt;"Host / IP"&lt;/em&gt; field&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fept8v9223a9ttiihugvz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fept8v9223a9ttiihugvz.png" alt="01 Beszel hub -  login" width="800" height="584"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcg8figd7a4uyal5os58f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcg8figd7a4uyal5os58f.png" alt="02 Beszel hub -  add system" width="800" height="584"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Remember to copy both the &lt;em&gt;Public Key&lt;/em&gt; and &lt;em&gt;Token&lt;/em&gt; which will be needed to configure the Agent container&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Beszel agent deployment (local)
&lt;/h2&gt;

&lt;p&gt;Create volumes folder destination and quadlet file for the beszel_agent.&lt;/p&gt;

&lt;p&gt;We need to make sure we add the volumen for &lt;em&gt;podman socket&lt;/em&gt; (double check the user id which own it, in our case is 1001)&lt;/p&gt;

&lt;p&gt;We also add the volume for the &lt;em&gt;beszel_socket&lt;/em&gt; (since is local Agent)&lt;/p&gt;

&lt;p&gt;After that, add to the Environment &lt;em&gt;Public Key&lt;/em&gt; and &lt;em&gt;Token&lt;/em&gt; and since this is local Agent, we need to add &lt;em&gt;LISTEN=/beszel_socket/beszel.sock&lt;/em&gt;&lt;br&gt;
(More information in Beszel website on this: &lt;a href="https://beszel.dev/guide/common-issues#connecting-hub-and-agent-on-the-same-system-using-docker" rel="noopener noreferrer"&gt;https://beszel.dev/guide/common-issues#connecting-hub-and-agent-on-the-same-system-using-docker&lt;/a&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /home/solifugo/pods/beszel/beszel_agent_data
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.config/containers/systemd/beszel_agent.container
&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;beszel agent

&lt;span class="o"&gt;[&lt;/span&gt;Container]
&lt;span class="nv"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker.io/henrygd/beszel-agent:latest
&lt;span class="nv"&gt;ContainerName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;beszel_agent
&lt;span class="nv"&gt;AutoUpdate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;registry
&lt;span class="nv"&gt;User&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1001
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/run/user/1001/podman/podman.sock:/run/user/1001/podman/podman.sock:ro
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/solifugo/pods/beszel/beszel_agent_data:/var/lib/beszel-agent
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/solifugo/pods/beszel/beszel_socket:/beszel_socket
&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOgfG4iXqHmqcYT/LhNQvgNCRA0HIIxEHjnk79rg+ypF"&lt;/span&gt; &lt;span class="nv"&gt;HUB_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:8090"&lt;/span&gt; &lt;span class="nv"&gt;TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"5f2b-126b3d08f8-a8dd-e796537cf8"&lt;/span&gt; &lt;span class="nv"&gt;LISTEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/beszel_socket/beszel.sock
&lt;span class="nv"&gt;Network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;host

&lt;span class="o"&gt;[&lt;/span&gt;Service]
&lt;span class="nv"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;unless-stopped

&lt;span class="o"&gt;[&lt;/span&gt;Install]
&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target default.target

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; daemon-reload
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; start beszel_agent.service
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman ps
CONTAINER ID  IMAGE                                  COMMAND               CREATED         STATUS                   PORTS                   NAMES
641ede03f72a  docker.io/henrygd/beszel:latest        serve &lt;span class="nt"&gt;--http&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0....  18 minutes ago  Up 18 minutes            0.0.0.0:8090-&amp;gt;8090/tcp  beszel_hub
c01b90706e13  docker.io/library/mariadb:latest       &lt;span class="nt"&gt;--default-authent&lt;/span&gt;...  15 minutes ago  Up 15 minutes            0.0.0.0:3306-&amp;gt;3306/tcp  mariadb
d03052aaf5b5  localhost:5000/p42_wordpress:v1        apache2-foregroun...  15 minutes ago  Up 15 minutes &lt;span class="o"&gt;(&lt;/span&gt;healthy&lt;span class="o"&gt;)&lt;/span&gt;  0.0.0.0:8042-&amp;gt;80/tcp    systemd-wordpress
5dd1a629b6bb  docker.io/henrygd/beszel-agent:latest                        16 seconds ago  Up 16 seconds                                    beszel_agent

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once we start the Agent, we should just click &lt;em&gt;Add system&lt;/em&gt; in the Hub and we should see the system&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F505dvbs7bi64dnpjs2j4.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F505dvbs7bi64dnpjs2j4.gif" alt="03 Beszel hub -  raspi added 03" width="720" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Beszel agent deployment (remote)
&lt;/h2&gt;

&lt;p&gt;If we are adding a remote Agent, we just specify IP/port instead of the Unix socket (beszel.sock)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwn0taa2iqth8g2dipnc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwn0taa2iqth8g2dipnc.png" alt="04 Beszel hub -  adding chromebook" width="800" height="602"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| penguin &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman run &lt;span class="nt"&gt;-d&lt;/span&gt;   &lt;span class="nt"&gt;--name&lt;/span&gt; beszel-agent  &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--user&lt;/span&gt; 1000   &lt;span class="nt"&gt;--network&lt;/span&gt; host   &lt;span class="nt"&gt;--restart&lt;/span&gt; unless-stopped  &lt;span class="se"&gt;\&lt;/span&gt;
 &lt;span class="nt"&gt;-v&lt;/span&gt; /run/user/1000/podman/podman.sock:/run/user/1000/podman/podman.sock:ro   &lt;span class="se"&gt;\&lt;/span&gt;
 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOgfG4iXqHmqcYT/LhNQvgNCRA0HIIxEHjnk79rg+ypF"&lt;/span&gt;  &lt;span class="se"&gt;\&lt;/span&gt;
 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;HUB_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"http://192.168.0.130:8090"&lt;/span&gt;   &lt;span class="se"&gt;\&lt;/span&gt;
 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"5be-0f813ae513-27d9-83664c253c"&lt;/span&gt;   &lt;span class="se"&gt;\&lt;/span&gt;
 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;LISTEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;45876   &lt;span class="se"&gt;\&lt;/span&gt;
 docker.io/henrygd/beszel-agent:latest

463c33d4cb24aa79193375deebb0a99be86ca53f0ba4a13ce291a0d429a119c4

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| penguin &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgag7tcbxr5er6al0gnr5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgag7tcbxr5er6al0gnr5.gif" alt="05 Beszel hub -  chromebook added" width="760" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Additional Details
&lt;/h2&gt;

&lt;p&gt;Make sure podman socket is running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; &lt;span class="nb"&gt;enable &lt;/span&gt;podman.socket
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; start podman.socket
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; status podman.socket
● podman.socket - Podman API Socket
     Loaded: loaded &lt;span class="o"&gt;(&lt;/span&gt;/usr/lib/systemd/user/podman.socket&lt;span class="p"&gt;;&lt;/span&gt; enabled&lt;span class="p"&gt;;&lt;/span&gt; preset: enabled&lt;span class="o"&gt;)&lt;/span&gt;
     Active: active &lt;span class="o"&gt;(&lt;/span&gt;listening&lt;span class="o"&gt;)&lt;/span&gt; since Wed 2026-02-18 15:37:35 GMT&lt;span class="p"&gt;;&lt;/span&gt; 17h ago
 Invocation: aeff63f6592d4d5d9fc3fce56f78286d
   Triggers: ● podman.service
       Docs: man:podman-system-service&lt;span class="o"&gt;(&lt;/span&gt;1&lt;span class="o"&gt;)&lt;/span&gt;
     Listen: /run/user/1001/podman/podman.sock &lt;span class="o"&gt;(&lt;/span&gt;Stream&lt;span class="o"&gt;)&lt;/span&gt;
     CGroup: /user.slice/user-1001.slice/user@1001.service/app.slice/podman.socket

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Raspberry pi, you can hit this issue when trying to get container memory stats:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Error getting container stats &lt;span class="nv"&gt;err&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"systemd-wordpress - bad memory stats - see https://github.com/henrygd/beszel/issues/144"&lt;/span&gt;
Error getting container stats &lt;span class="nv"&gt;err&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"mariadb - bad memory stats - see https://github.com/henrygd/beszel/issues/144"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Solution can be find here, which is to add some componenets to &lt;em&gt;firmware/cmdline.txt&lt;/em&gt;&lt;br&gt;
&lt;a href="https://akashrajpurohit.com/blog/resolving-missing-memory-stats-in-docker-stats-on-raspberry-pi/" rel="noopener noreferrer"&gt;https://akashrajpurohit.com/blog/resolving-missing-memory-stats-in-docker-stats-on-raspberry-pi/&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo cat&lt;/span&gt; /boot/cmdline.txt
&lt;span class="nv"&gt;console&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tty1 &lt;span class="nv"&gt;root&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;PARTUUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dc0d2f94-02 &lt;span class="nv"&gt;rootfstype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ext4 fsck.repair&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;yes &lt;/span&gt;rootwait &lt;span class="nv"&gt;cgroup_enable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cpuset &lt;span class="nv"&gt;cgroup_enable&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;memory &lt;span class="nv"&gt;cgroup_memory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are trying to run podman in Crostini (Chromebook Linux subsystem) you can find some help here: &lt;a href="https://gist.github.com/vec715/4c4858d7a6167fe5b69915869705fc87#file-setup-podman-on-chrome-os-flex-and-crostini-md" rel="noopener noreferrer"&gt;Setup Podman on Chrome OS Flex and Crostini.md&lt;/a&gt; (I had to run the Troubleshooting additional commands to get it working)&lt;/p&gt;

</description>
      <category>podman</category>
      <category>raspberrypi</category>
      <category>tutorial</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>How to Configure Podman Auto-Updates and Health-Check Rollbacks</title>
      <dc:creator>Project-42</dc:creator>
      <pubDate>Thu, 26 Feb 2026 11:55:06 +0000</pubDate>
      <link>https://dev.to/project42/how-to-configure-podman-auto-updates-and-health-check-rollbacks-ppo</link>
      <guid>https://dev.to/project42/how-to-configure-podman-auto-updates-and-health-check-rollbacks-ppo</guid>
      <description>&lt;p&gt;In this post, I wanted to test podman autoupdate and how the "self healing" (rollback) action works,&lt;br&gt;
(you can check this post to see how to setup local repository and modify a wordpress image &lt;a href="https://project42.site/how-to-set-up-a-local-podman-registry-and-customize-podman-images/{target=_blank}" rel="noopener noreferrer"&gt;How to Set Up a Local Podman Registry and Customize Podman Images&lt;/a&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. Change wordpress container&lt;/li&gt;
&lt;li&gt;2. Start the service with the new image&lt;/li&gt;
&lt;li&gt;3. Modify the Containerfile&lt;/li&gt;
&lt;li&gt;4. Testing Autoupdate&lt;/li&gt;
&lt;li&gt;5. Testing "self-healing" or "auto-rollback"&lt;/li&gt;
&lt;li&gt;6. Setting systemd podman auto-update execution&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  1. Change wordpress container
&lt;/h2&gt;

&lt;p&gt;I currently run the docker.io wordpress image as you can see below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman ps
CONTAINER ID  IMAGE                               STATUS         NAMES
414c230b5e8c  docker.io/library/mariadb:latest    Up 5 days      mariadb
f95dbc9e18a6  docker.io/library/wordpress:latest  Up 5 days      systemd-wordpress
39954e773035  docker.io/library/registry:2        Up 42 minutes  local-registry

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To change to my local image and make podman autoupdate to work, I have modified the lines entries for &lt;em&gt;Image&lt;/em&gt; and &lt;em&gt;AutoUpdate&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.config/containers/systemd/wordpress.container
&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;WordPress Web Server
&lt;span class="nv"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mariadb.service

&lt;span class="o"&gt;[&lt;/span&gt;Container]
&lt;span class="nv"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;localhost:5000/p42_wordpress:v1
&lt;span class="nv"&gt;AutoUpdate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;registry
&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;WORDPRESS_DB_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mariadb:3306
&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;WORDPRESS_DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress
&lt;span class="nv"&gt;WORDPRESS_DB_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress
&lt;span class="nv"&gt;WORDPRESS_DB_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/solifugo/pods/wordpress/wp-content:/var/www/html/wp-content
&lt;span class="nv"&gt;PublishPort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8042:80
&lt;span class="nv"&gt;Network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wp.network

&lt;span class="o"&gt;[&lt;/span&gt;Service]
&lt;span class="nv"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always

&lt;span class="o"&gt;[&lt;/span&gt;Install]
&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target default.target

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; daemon-reload
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Start the service with the new image
&lt;/h2&gt;

&lt;p&gt;To make sure we are using the local image, we will execute the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; stop wordpress.service
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; wordpress
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; daemon-reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can now start the service with local image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; start wordpress.service

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman ps
CONTAINER ID  IMAGE                             STATUS             NAMES
39954e773035  docker.io/library/registry:2      Up About an hour   local-registry
de197041e7b9  docker.io/library/mariadb:latest  Up 7 minutes       mariadb
72cef8edcee3  localhost:5000/p42_wordpress:v1   Up About a minute  systemd-wordpress

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Modify the Containerfile
&lt;/h2&gt;

&lt;p&gt;Let's add a "version" file or a simple comment so we can verify the change later.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;Containerfile
&lt;span class="c"&gt;# Use the official WordPress image as a base&lt;/span&gt;
FROM docker.io/library/wordpress:latest

&lt;span class="c"&gt;# Example: Increase the upload size by creating a custom PHP config&lt;/span&gt;
RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'file_uploads = On\nmemory_limit = 256M\nupload_max_filesize = 64M\npost_max_size = 64M\nmax_execution_time = 300'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /usr/local/etc/php/conf.d/uploads.ini

&lt;span class="c"&gt;# NEW: Add a simple version file we can check&lt;/span&gt;
RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Update Test - Version 2.0"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /image_version.txt

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can now Build it and and Push the "New" v1 (We are going to overwrite the :v1 tag for simplicity)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman build &lt;span class="nt"&gt;-t&lt;/span&gt; localhost:5000/p42_wordpress:v1 &lt;span class="nb"&gt;.&lt;/span&gt;
STEP 1/3: FROM docker.io/library/wordpress:latest
STEP 2/3: RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'file_uploads = On\nmemory_limit = 256M\nupload_max_filesize = 64M\npost_max_size = 64M\nmax_execution_time = 300'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /usr/local/etc/php/conf.d/uploads.ini
&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Using cache 6213e109406f3ce3ac791b8a8b2d57cf3d678b7c4bb8ede40be427c149b86b18
&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 6213e109406f
STEP 3/3: RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Update Test - Version 2.0"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /image_version.txt
COMMIT localhost:5000/p42_wordpress:v1
&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; fe462c1e2d14
Successfully tagged localhost:5000/p42_wordpress:v1
fe462c1e2d14c4e87261be851e6b76cf686ff4dbedf4dc050b77a0ea9ef537cc

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman push localhost:5000/p42_wordpress:v1
Getting image &lt;span class="nb"&gt;source &lt;/span&gt;signatures
Copying blob 38c51b789feb skipped: already exists
&lt;span class="o"&gt;[&lt;/span&gt;...]
Copying blob 9926eecc266a &lt;span class="k"&gt;done&lt;/span&gt;   |
Copying blob bd9ddc54bea9 skipped: already exists
Copying blob 1fb5b7dba217 skipped: already exists
Copying blob ae1a66031d13 skipped: already exists
Copying config fe462c1e2d &lt;span class="k"&gt;done&lt;/span&gt;   |
Writing manifest to image destination

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Testing Autoupdate
&lt;/h2&gt;

&lt;p&gt;Now we can see how we have an update pending:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman auto-update &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
UNIT               IMAGE                             POLICY      UPDATED
wordpress.service  localhost:5000/p42_wordpress:v1   registry    pending
mariadb.service    docker.io/library/mariadb:latest  registry    &lt;span class="nb"&gt;false&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's execute the update and confirm we can see the new file added in the image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman auto-update
Trying to pull localhost:5000/p42_wordpress:v1...
Getting image &lt;span class="nb"&gt;source &lt;/span&gt;signatures
Copying blob 9860aa0d13b7 skipped: already exists
&lt;span class="o"&gt;[&lt;/span&gt;...]
Copying blob 723c4da029f2 skipped: already exists
Copying config fe462c1e2d &lt;span class="k"&gt;done&lt;/span&gt;   |
Writing manifest to image destination
UNIT               IMAGE                             POLICY      UPDATED
mariadb.service    docker.io/library/mariadb:latest  registry    &lt;span class="nb"&gt;false
&lt;/span&gt;wordpress.service  localhost:5000/p42_wordpress:v1   registry    &lt;span class="nb"&gt;true&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman &lt;span class="nb"&gt;exec &lt;/span&gt;systemd-wordpress &lt;span class="nb"&gt;cat&lt;/span&gt; /image_version.txt
Update Test - Version 2.0

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Testing "self-healing" or "auto-rollback"
&lt;/h2&gt;

&lt;p&gt;One of the best things about podman autoupdate, is the fact that will rollback an update if it is unable to complete the deployment after the update&lt;/p&gt;

&lt;p&gt;Let's modify the local image again this time adding a break point as below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;Containerfile
&lt;span class="c"&gt;# Use the official WordPress image as a base&lt;/span&gt;
FROM docker.io/library/wordpress:latest

&lt;span class="c"&gt;# Example: Increase the upload size by creating a custom PHP config&lt;/span&gt;
RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'file_uploads = On\nmemory_limit = 256M\nupload_max_filesize = 64M\npost_max_size = 64M\nmax_execution_time = 300'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /usr/local/etc/php/conf.d/uploads.ini

&lt;span class="c"&gt;# BROKEN STEP: Force the container to fail on startup&lt;/span&gt;
&lt;span class="c"&gt;# This tries to run a non-existent script&lt;/span&gt;
ENTRYPOINT &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"/bin/bash"&lt;/span&gt;, &lt;span class="s2"&gt;"-c"&lt;/span&gt;, &lt;span class="s2"&gt;"exit 1"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="c"&gt;# NEW: Add a simple version file we can check&lt;/span&gt;
RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Update Test - Version 3.0"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /image_version.txt

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman build &lt;span class="nt"&gt;-t&lt;/span&gt; localhost:5000/p42_wordpress:v1 &lt;span class="nb"&gt;.&lt;/span&gt;
STEP 1/4: FROM docker.io/library/wordpress:latest
STEP 2/4: RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'file_uploads = On\nmemory_limit = 256M\nupload_max_filesize = 64M\npost_max_size = 64M\nmax_execution_time = 300'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /usr/local/etc/php/conf.d/uploads.ini
&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Using cache 6213e109406f3ce3ac791b8a8b2d57cf3d678b7c4bb8ede40be427c149b86b18
&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 6213e109406f
STEP 3/4: ENTRYPOINT &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"/bin/bash"&lt;/span&gt;, &lt;span class="s2"&gt;"-c"&lt;/span&gt;, &lt;span class="s2"&gt;"exit 1"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Using cache 009309cf75edc7d7d12c7898cf6a464a90f472c7e8c9762f24d0a7488ae6608f
&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 009309cf75ed
STEP 4/4: RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Update Test - Version 3.0"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /image_version.txt
COMMIT localhost:5000/p42_wordpress:v1
&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 3a3adcb35052
Successfully tagged localhost:5000/p42_wordpress:v1
3a3adcb35052464966b9c87f4f2f9f41d7e920e8b79b944a6346291cd6ca158d

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman push localhost:5000/p42_wordpress:v1
Getting image &lt;span class="nb"&gt;source &lt;/span&gt;signatures
&lt;span class="o"&gt;[&lt;/span&gt;...]
Copying blob 3c09e98b8858 &lt;span class="k"&gt;done&lt;/span&gt;   |
Copying blob d905cab7558a skipped: already exists
Copying blob 69a4f4da7ad4 skipped: already exists
Copying blob 3b5472ea1c23 skipped: already exists
Copying blob 843bf501e50b skipped: already exists
Copying config 3a3adcb350 &lt;span class="k"&gt;done&lt;/span&gt;   |
Writing manifest to image destination

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To make sure podman is aware of the issue, we can add Health Checks and make sure podman notifies systemd that health check is passed.&lt;/p&gt;

&lt;p&gt;Remember that the health commands are executed inside the container, so the port will be 80 and not 8042 that is the host published port.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.config/containers/systemd/wordpress.container
&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;WordPress Web Server
&lt;span class="nv"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mariadb.service

&lt;span class="o"&gt;[&lt;/span&gt;Container]
&lt;span class="nv"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;localhost:5000/p42_wordpress:v1
&lt;span class="nv"&gt;AutoUpdate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;registry
&lt;span class="c"&gt;#NEW Health Checks commands&lt;/span&gt;
&lt;span class="nv"&gt;HealthCmd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;curl &lt;span class="nt"&gt;--fail&lt;/span&gt; http://localhost:80
&lt;span class="nv"&gt;HealthInterval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5s
&lt;span class="nv"&gt;HealthRetries&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
&lt;span class="c"&gt;# Force Podman to wait for the health check before saying "I'm done"&lt;/span&gt;
&lt;span class="nv"&gt;Notify&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;healthy
&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;WORDPRESS_DB_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mariadb:3306 &lt;span class="nv"&gt;WORDPRESS_DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress &lt;span class="nv"&gt;WORDPRESS_DB_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress &lt;span class="nv"&gt;WORDPRESS_DB_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/solifugo/pods/wordpress/wp-content:/var/www/html/wp-content
&lt;span class="nv"&gt;PublishPort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8042:80
&lt;span class="nv"&gt;Network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wp.network

&lt;span class="o"&gt;[&lt;/span&gt;Service]
&lt;span class="nv"&gt;Type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;notify
&lt;span class="c"&gt;# Disable the immediate restart loop so it doesn't "Repeat too quickly"&lt;/span&gt;
&lt;span class="nv"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;no
&lt;span class="c"&gt;# Give the health check time to actually fail&lt;/span&gt;
&lt;span class="nv"&gt;TimeoutStartSec&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;40

&lt;span class="o"&gt;[&lt;/span&gt;Install]
&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target default.target

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; daemon-reload
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman ps
CONTAINER ID  IMAGE                             STATUS                  NAMES
39954e773035  docker.io/library/registry:2      Up 2 hours              local-registry
de197041e7b9  docker.io/library/mariadb:latest  Up About an hour        mariadb
375d7658f685  localhost:5000/p42_wordpress:v1   Up 4 minutes &lt;span class="o"&gt;(&lt;/span&gt;healthy&lt;span class="o"&gt;)&lt;/span&gt;  systemd-wordpress
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman auto-update &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
UNIT               IMAGE                             POLICY      UPDATED
wordpress.service  localhost:5000/p42_wordpress:v1   registry    pending
mariadb.service    docker.io/library/mariadb:latest  registry    &lt;span class="nb"&gt;false&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When we execute the update, podman will rollback the update and restart the container again&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman auto-update
Trying to pull localhost:5000/p42_wordpress:v1...
Getting image &lt;span class="nb"&gt;source &lt;/span&gt;signatures
&lt;span class="o"&gt;[&lt;/span&gt;...]
Copying blob 843bf501e50b skipped: already exists
Copying config 3a3adcb350 &lt;span class="k"&gt;done&lt;/span&gt;   |
Writing manifest to image destination
UNIT               IMAGE                             POLICY      UPDATED
mariadb.service    docker.io/library/mariadb:latest  registry    &lt;span class="nb"&gt;false
&lt;/span&gt;wordpress.service  localhost:5000/p42_wordpress:v1   registry    rolled back

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman ps
CONTAINER ID  IMAGE                             STATUS                  NAMES
39954e773035  docker.io/library/registry:2      Up 2 hours              local-registry
de197041e7b9  docker.io/library/mariadb:latest  Up 2 hours              mariadb
9cb996a3112a  localhost:5000/p42_wordpress:v1   Up 9 seconds &lt;span class="o"&gt;(&lt;/span&gt;healthy&lt;span class="o"&gt;)&lt;/span&gt;  systemd-wordpress

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Setting systemd podman auto-update execution
&lt;/h2&gt;

&lt;p&gt;Podman comes with a pre-configured systemd timer that runs podman auto-update.&lt;br&gt;
Just make sure you edit the timer and enable it (by default would be executed every day midnight)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; edit podman-auto-update.timer
Successfully installed edited file &lt;span class="s1"&gt;'/home/solifugo/.config/systemd/user/podman-auto-update.timer.d/override.conf'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /home/solifugo/.config/systemd/user/podman-auto-update.timer.d/override.conf
&lt;span class="o"&gt;[&lt;/span&gt;Timer]
&lt;span class="nv"&gt;OnCalendar&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="nv"&gt;OnCalendar&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Mon &lt;span class="k"&gt;*&lt;/span&gt;-&lt;span class="k"&gt;*&lt;/span&gt;-&lt;span class="k"&gt;*&lt;/span&gt; 03:00:00

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; podman-auto-update.timer
Created symlink &lt;span class="s1"&gt;'/home/solifugo/.config/systemd/user/timers.target.wants/podman-auto-update.timer'&lt;/span&gt; → &lt;span class="s1"&gt;'/usr/lib/systemd/user/podman-auto-update.timer'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; list-timers podman-auto-update.timer
NEXT                          LEFT LAST PASSED UNIT                     ACTIVATES
Mon 2026-03-02 03:10:04 GMT 5 days -         - podman-auto-update.timer podman-auto-update.service

1 timers listed.
Pass &lt;span class="nt"&gt;--all&lt;/span&gt; to see loaded but inactive timers, too.
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>podman</category>
      <category>tutorial</category>
      <category>containers</category>
      <category>autoupdate</category>
    </item>
    <item>
      <title>How to Set Up a Local Podman Registry and Customize Podman Images</title>
      <dc:creator>Project-42</dc:creator>
      <pubDate>Mon, 23 Feb 2026 11:28:48 +0000</pubDate>
      <link>https://dev.to/project42/how-to-set-up-a-local-podman-registry-and-customize-podman-images-2dbc</link>
      <guid>https://dev.to/project42/how-to-set-up-a-local-podman-registry-and-customize-podman-images-2dbc</guid>
      <description>&lt;p&gt;It is never bad idea to keep local container repositories, specially if you need to add modifications to the containers for your specific environment&lt;/p&gt;

&lt;p&gt;This will also will make easier some local testing&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
1. Create a Local Podman Registry

&lt;ul&gt;
&lt;li&gt;1.1. Pull and run the registry image.&lt;/li&gt;
&lt;li&gt;1.2. Configure "Insecure" access.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

2. Modify a WordPress Container Image

&lt;ul&gt;
&lt;li&gt;2.1. Create your Containerfile&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;3. Build and Push to your Local Registry&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  1. Create a Local Podman Registry
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1.1. Pull and run the registry image.
&lt;/h2&gt;

&lt;p&gt;Run this command to start a registry on port 5000:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 5000:5000 &lt;span class="nt"&gt;--restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always &lt;span class="nt"&gt;--name&lt;/span&gt; local-registry registry:2
Resolved &lt;span class="s2"&gt;"registry"&lt;/span&gt; as an &lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;/etc/containers/registries.conf.d/shortnames.conf&lt;span class="o"&gt;)&lt;/span&gt;
Trying to pull docker.io/library/registry:2...
Getting image &lt;span class="nb"&gt;source &lt;/span&gt;signatures
Copying blob bd39ca3613a6 &lt;span class="k"&gt;done&lt;/span&gt;   |
Copying blob ddcb6d98388d &lt;span class="k"&gt;done&lt;/span&gt;   |
Copying blob 9a6b3f59ebc2 &lt;span class="k"&gt;done&lt;/span&gt;   |
Copying blob 8bbaad1488a8 &lt;span class="k"&gt;done&lt;/span&gt;   |
Copying blob 95459497489f &lt;span class="k"&gt;done&lt;/span&gt;   |
Copying config 33eeff39e0 &lt;span class="k"&gt;done&lt;/span&gt;   |
Writing manifest to image destination
39954e773035d07c13f5f458a8e16a39ffa4e171649792287c38af9646866bd2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  1.2. Configure "Insecure" access.
&lt;/h2&gt;

&lt;p&gt;By default, Podman expects registries to use HTTPS. For a local setup, you need to tell Podman it’s okay to use HTTP for localhost.&lt;br&gt;
Edit (or create) /etc/containers/registries.conf and add the following &lt;em&gt;registry&lt;/em&gt; entry&lt;br&gt;
Be careful, if you have a specific regitries conf file for the user creating the container, you need to modify that file (default location is &lt;em&gt;/home/{solifugo}/.config/containers/registries.conf&lt;/em&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lrth&lt;/span&gt; /etc/containers/registries.conf
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root root 3.8K Mar  7  2025 /etc/containers/registries.conf

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/containers/registries.conf

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-5&lt;/span&gt; /etc/containers/registries.conf
&lt;span class="c"&gt;# # 3. internal-registry-for-example.com/bar/image:latest&lt;/span&gt;
&lt;span class="c"&gt;# # in order, and use the first one that exists.&lt;/span&gt;
&lt;span class="o"&gt;[[&lt;/span&gt;registry]]
location &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"localhost:5000"&lt;/span&gt;
insecure &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  2. Modify a WordPress Container Image
&lt;/h1&gt;

&lt;p&gt;The best way to modify an image is via a Containerfile (Podman's version of a Dockerfile).&lt;br&gt;
In this example we increase the PHP upload limit:&lt;/p&gt;
&lt;h2&gt;
  
  
  2.1. Create your Containerfile
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /home/solifugo/pods/p42_wordpress
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;Containerfile
&lt;span class="c"&gt;# Use the official WordPress image as a base&lt;/span&gt;
FROM docker.io/library/wordpress:latest

&lt;span class="c"&gt;# Example: Increase the upload size by creating a custom PHP config&lt;/span&gt;
RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'file_uploads = On\nmemory_limit = 256M\nupload_max_filesize = 64M\npost_max_size = 64M\nmax_execution_time = 300'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /usr/local/etc/php/conf.d/uploads.ini

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h1&gt;
  
  
  3. Build and Push to your Local Registry
&lt;/h1&gt;

&lt;p&gt;Now, let's build the image and store it in the local registry&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman build &lt;span class="nt"&gt;-t&lt;/span&gt; localhost:5000/p42_wordpress:v1 &lt;span class="nb"&gt;.&lt;/span&gt;
STEP 1/2: FROM docker.io/library/wordpress:latest
STEP 2/2: RUN &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'file_uploads = On\nmemory_limit = 256M\nupload_max_filesize = 64M\npost_max_size = 64M\nmax_execution_time = 300'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /usr/local/etc/php/conf.d/uploads.ini
COMMIT localhost:5000/p42_wordpress:v1
&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 6213e109406f
Successfully tagged localhost:5000/p42_wordpress:v1
6213e109406f3ce3ac791b8a8b2d57cf3d678b7c4bb8ede40be427c149b86b18

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;podman push localhost:5000/p42_wordpress:v1
Getting image &lt;span class="nb"&gt;source &lt;/span&gt;signatures
Copying blob a0e71ab2b234 &lt;span class="k"&gt;done&lt;/span&gt;   |
&lt;span class="o"&gt;[&lt;/span&gt;...]
Copying config 6213e10940 &lt;span class="k"&gt;done&lt;/span&gt;   |
Writing manifest to image destination

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can check the local registry by using the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;curl http://localhost:5000/v2/_catalog
&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"repositories"&lt;/span&gt;:[&lt;span class="s2"&gt;"p42_wordpress"&lt;/span&gt;&lt;span class="o"&gt;]}&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/p42_wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>podman</category>
      <category>tutorial</category>
      <category>container</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>Building Multi-Container Applications using Podman Quadlets</title>
      <dc:creator>Project-42</dc:creator>
      <pubDate>Fri, 20 Feb 2026 14:26:58 +0000</pubDate>
      <link>https://dev.to/project42/building-multi-container-applications-using-podman-quadlets-3063</link>
      <guid>https://dev.to/project42/building-multi-container-applications-using-podman-quadlets-3063</guid>
      <description>&lt;p&gt;A perfect practical application for Quadlets is deploying a WordPress stack.&lt;br&gt;
This illustrates how multiple containers can communicate with each other.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. Common Network (wp.network)&lt;/li&gt;
&lt;li&gt;2. The mariadb Container (mariadb.container)&lt;/li&gt;
&lt;li&gt;3. The WordPress Container (wordpress.container)&lt;/li&gt;
&lt;li&gt;4. Key Adjustments Made&lt;/li&gt;
&lt;li&gt;5. How to Start It&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  1. Common Network (wp.network)
&lt;/h2&gt;

&lt;p&gt;Create a quadlet network file at ~/.config/containers/systemd/wp.network&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.config/containers/systemd/wp.network
&lt;span class="o"&gt;[&lt;/span&gt;Network]
&lt;span class="nv"&gt;Label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. The mariadb Container (mariadb.container)
&lt;/h2&gt;

&lt;p&gt;Create a quadlet container file at ~/.config/containers/systemd/&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.config/containers/systemd/mariadb.container
&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;MariaDB WordPress Database

&lt;span class="o"&gt;[&lt;/span&gt;Container]
&lt;span class="nv"&gt;ContainerName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mariadb
&lt;span class="nv"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker.io/library/mariadb:latest
&lt;span class="c"&gt;# Quadlet likes environment variables on one line or using a separate env file&lt;/span&gt;
&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress &lt;span class="nv"&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress &lt;span class="nv"&gt;MYSQL_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress &lt;span class="nv"&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress
&lt;span class="nv"&gt;Exec&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;--default-authentication-plugin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mysql_native_password
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/solifugo/pods/wordpress/db_data:/var/lib/mysql
&lt;span class="nv"&gt;Network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wp.network
&lt;span class="nv"&gt;PublishPort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3306:3306

&lt;span class="o"&gt;[&lt;/span&gt;Service]
&lt;span class="nv"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always

&lt;span class="o"&gt;[&lt;/span&gt;Install]
&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress.service multi-user.target default.target

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. The WordPress Container (wordpress.container)
&lt;/h2&gt;

&lt;p&gt;Create a quadlet container file at ~/.config/containers/systemd/&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.config/containers/systemd/wordpress.container
&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;WordPress Web Server
&lt;span class="nv"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mariadb.service

&lt;span class="o"&gt;[&lt;/span&gt;Container]
&lt;span class="nv"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker.io/library/wordpress:latest
&lt;span class="nv"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;WORDPRESS_DB_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mariadb:3306 &lt;span class="nv"&gt;WORDPRESS_DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress &lt;span class="nv"&gt;WORDPRESS_DB_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress &lt;span class="nv"&gt;WORDPRESS_DB_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wordpress
&lt;span class="nv"&gt;Volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/home/solifugo/pods/wordpress/wp-content:/var/www/html/wp-content
&lt;span class="nv"&gt;PublishPort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8042:80
&lt;span class="nv"&gt;Network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wp.network

&lt;span class="o"&gt;[&lt;/span&gt;Service]
&lt;span class="nv"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always

&lt;span class="o"&gt;[&lt;/span&gt;Install]
&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target default.target

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Key Adjustments Made
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Networking: In Podman, containers in the same default network can talk to each other using their filenames as hostnames.&lt;br&gt;
I set WORDPRESS_DB_HOST=mariadb to match the mariadb.container filename.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dependencies: The After=mariadb.service line in the WordPress file ensures the database attempts to start before the web server.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. How to Start It
&lt;/h2&gt;

&lt;p&gt;Once the files are in ~/.config/containers/systemd/, run the following commands:&lt;/p&gt;

&lt;p&gt;Reload systemd to generate the services and start the service&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; daemon-reload

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; list-unit-files |grep &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s1"&gt;'word|mari'&lt;/span&gt;
mariadb.service                                generated -
wordpress.service                              generated -

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; start wordpress.service

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; status wordpress.service
● wordpress.service - WordPress Web Server
     Loaded: loaded &lt;span class="o"&gt;(&lt;/span&gt;/home/solifugo/.config/containers/systemd/wordpress.container&lt;span class="p"&gt;;&lt;/span&gt; generated&lt;span class="o"&gt;)&lt;/span&gt;
     Active: active &lt;span class="o"&gt;(&lt;/span&gt;running&lt;span class="o"&gt;)&lt;/span&gt; since Fri 2026-02-13 12:30:18 GMT&lt;span class="p"&gt;;&lt;/span&gt; 3 days ago
 Invocation: b544331ed44d4d1f8092e71265ab7783
   Main PID: 1511243 &lt;span class="o"&gt;(&lt;/span&gt;conmon&lt;span class="o"&gt;)&lt;/span&gt;
      Tasks: 23 &lt;span class="o"&gt;(&lt;/span&gt;limit: 8750&lt;span class="o"&gt;)&lt;/span&gt;
        CPU: 20.699s
&lt;span class="o"&gt;[&lt;/span&gt;...]
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~/pods/wordpress &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And &lt;strong&gt;&lt;em&gt;voila!&lt;/em&gt;&lt;/strong&gt; we got our wordpress installation ready&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F003xmxum2pfgsnn9bsd1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F003xmxum2pfgsnn9bsd1.png" alt="Wordpress running in Podman" width="779" height="864"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>podman</category>
      <category>wordpress</category>
      <category>tutorial</category>
      <category>container</category>
    </item>
    <item>
      <title>How to Run Podman Quadlets on Raspberry Pi</title>
      <dc:creator>Project-42</dc:creator>
      <pubDate>Tue, 17 Feb 2026 11:03:46 +0000</pubDate>
      <link>https://dev.to/project42/how-to-run-podman-quadlets-on-raspberry-pi-3nc1</link>
      <guid>https://dev.to/project42/how-to-run-podman-quadlets-on-raspberry-pi-3nc1</guid>
      <description>&lt;p&gt;I'm trying to create a small set of articles related to podman, so I thought about starting from the start; how to get it running in my Raspberry Pi, which is using Debian 13 (trixie)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. Install Podman&lt;/li&gt;
&lt;li&gt;2. Prepare the User Environment&lt;/li&gt;
&lt;li&gt;3. Create the Quadlet Directory&lt;/li&gt;
&lt;li&gt;4. Create a Sample Quadlet&lt;/li&gt;
&lt;li&gt;5. Activate and Start the Service&lt;/li&gt;
&lt;li&gt;6. Enable Service at boot&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Install Podman
&lt;/h2&gt;

&lt;p&gt;First, update your package list and install Podman.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; podman
Get:1 http://security.debian.org/debian-security trixie-security InRelease &lt;span class="o"&gt;[&lt;/span&gt;43.4 kB]
Get:2 http://archive.raspberrypi.org/debian trixie InRelease &lt;span class="o"&gt;[&lt;/span&gt;54.8 kB]
&lt;span class="o"&gt;[&lt;/span&gt;...]
Installing:
  podman

Suggested packages:
  docker-compose

Summary:
  Upgrading: 0, Installing: 1, Removing: 0, Not Upgrading: 4
  Download size: 21.2 MB
  Space needed: 82.6 MB / 195 GB available

Get:1 http://deb.debian.org/debian trixie/main arm64 podman arm64 5.4.2+ds1-2+b2 &lt;span class="o"&gt;[&lt;/span&gt;21.2 MB]
Fetched 21.2 MB &lt;span class="k"&gt;in &lt;/span&gt;1s &lt;span class="o"&gt;(&lt;/span&gt;16.7 MB/s&lt;span class="o"&gt;)&lt;/span&gt;
Selecting previously unselected package podman.
&lt;span class="o"&gt;(&lt;/span&gt;Reading database ... 76622 files and directories currently installed.&lt;span class="o"&gt;)&lt;/span&gt;
Preparing to unpack .../podman_5.4.2+ds1-2+b2_arm64.deb ...
Unpacking podman &lt;span class="o"&gt;(&lt;/span&gt;5.4.2+ds1-2+b2&lt;span class="o"&gt;)&lt;/span&gt; ...
Setting up podman &lt;span class="o"&gt;(&lt;/span&gt;5.4.2+ds1-2+b2&lt;span class="o"&gt;)&lt;/span&gt; ...
Processing triggers &lt;span class="k"&gt;for &lt;/span&gt;man-db &lt;span class="o"&gt;(&lt;/span&gt;2.13.1-1&lt;span class="o"&gt;)&lt;/span&gt; ...

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Prepare the User Environment
&lt;/h2&gt;

&lt;p&gt;For a local user to run services that start at boot (without being logged in), you must enable lingering. This allows the user's systemd instance to start on boot and stay running after logout.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;loginctl enable-linger &lt;span class="nv"&gt;$USER&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Create the Quadlet Directory
&lt;/h2&gt;

&lt;p&gt;Quadlets for local users are stored in a specific directory within your home folder. Systemd will look here to generate the service files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.config/containers/systemd

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Create a Sample Quadlet
&lt;/h2&gt;

&lt;p&gt;To test the setup, create a simple container Quadlet file (e.g., a basic Nginx server).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.config/containers/systemd/hello.container
&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;A simple Quadlet container

&lt;span class="o"&gt;[&lt;/span&gt;Container]
&lt;span class="nv"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker.io/library/nginx:alpine
&lt;span class="nv"&gt;PublishPort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4242:80

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Activate and Start the Service
&lt;/h2&gt;

&lt;p&gt;Because Quadlets use a systemd generator, you must reload the user-level daemon to "see" the new file and generate the underlying &lt;em&gt;.service&lt;/em&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Reload the user's systemd daemon&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; daemon-reload

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;span class="c"&gt;# Start and confirm the generated service status&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; start hello.service

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; status hello.service
● hello.service - A simple Quadlet container
     Loaded: loaded &lt;span class="o"&gt;(&lt;/span&gt;/home/solifugo/.config/containers/systemd/hello.container&lt;span class="p"&gt;;&lt;/span&gt; generated&lt;span class="o"&gt;)&lt;/span&gt;
     Active: active &lt;span class="o"&gt;(&lt;/span&gt;running&lt;span class="o"&gt;)&lt;/span&gt; since Mon 2026-02-16 13:31:49 GMT&lt;span class="p"&gt;;&lt;/span&gt; 7s ago
&lt;span class="o"&gt;[&lt;/span&gt;...]
&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;curl 127.0.0.1:4242
&amp;lt;&lt;span class="o"&gt;!&lt;/span&gt;DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;&lt;span class="nb"&gt;head&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&amp;lt;title&amp;gt;Welcome to nginx!&amp;lt;/title&amp;gt;
&amp;lt;style&amp;gt;
html &lt;span class="o"&gt;{&lt;/span&gt; color-scheme: light dark&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
body &lt;span class="o"&gt;{&lt;/span&gt; width: 35em&lt;span class="p"&gt;;&lt;/span&gt; margin: 0 auto&lt;span class="p"&gt;;&lt;/span&gt;
font-family: Tahoma, Verdana, Arial, sans-serif&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h1&amp;gt;Welcome to nginx!&amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt;If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;For online documentation and support please refer to
&amp;lt;a &lt;span class="nv"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"http://nginx.org/"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;nginx.org&amp;lt;/a&amp;gt;.&amp;lt;br/&amp;gt;
Commercial support is available at
&amp;lt;a &lt;span class="nv"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"http://nginx.com/"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;nginx.com&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;Thank you &lt;span class="k"&gt;for &lt;/span&gt;using nginx.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Enable Service at boot
&lt;/h2&gt;

&lt;p&gt;The enable command is used to enable a systemd service to start automatically on boot, however, for podman we can do it by including an [Install] section inside the .container file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.config/containers/systemd/hello.container
&lt;span class="o"&gt;[&lt;/span&gt;Unit]
&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;A simple Quadlet container

&lt;span class="o"&gt;[&lt;/span&gt;Container]
&lt;span class="nv"&gt;Image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker.io/library/nginx:alpine
&lt;span class="nv"&gt;PublishPort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4242:80

&lt;span class="o"&gt;[&lt;/span&gt;Install]
&lt;span class="c"&gt;# This is the "enable" equivalent for Quadlets&lt;/span&gt;
&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;default.target

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After changing the service file, we always need to reload the user-level daemon&lt;/p&gt;

&lt;p&gt;We can confirm now that we are having a service symbolic link of the right folder so it will start automatically when booting into the default target&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; /run/user/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/systemd/generator/default.target.wants/hello.service
&lt;span class="nb"&gt;ls&lt;/span&gt;: cannot access &lt;span class="s1"&gt;'/run/user/1001/systemd/generator/default.target.wants/hello.service'&lt;/span&gt;: No such file or directory

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; daemon-reload

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; /run/user/&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;/systemd/generator/default.target.wants/hello.service
lrwxrwxrwx 1 solifugo solifugo 16 Feb 16 13:49 /run/user/1001/systemd/generator/default.target.wants/hello.service -&amp;gt; ../hello.service

&lt;span class="o"&gt;[&lt;/span&gt;|&lt;span class="o"&gt;=&lt;/span&gt;| raspi &lt;span class="k"&gt;in&lt;/span&gt; ~ &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There you have it, with Podman and Quadlets now configured, we are ready to manage containerized services as native systemd units.&lt;/p&gt;

</description>
      <category>podman</category>
      <category>raspberrypi</category>
      <category>tutorial</category>
      <category>debian</category>
    </item>
    <item>
      <title>Creating Oracle Real Application Clusters with Vagrant</title>
      <dc:creator>Project-42</dc:creator>
      <pubDate>Wed, 17 Nov 2021 13:18:30 +0000</pubDate>
      <link>https://dev.to/project42/creating-oracle-real-application-clusters-with-vagrant-1295</link>
      <guid>https://dev.to/project42/creating-oracle-real-application-clusters-with-vagrant-1295</guid>
      <description>&lt;p&gt;I tested some of the Vagrant projects made by &lt;a href="https://oracle-base.com/misc/site-info" rel="noopener noreferrer"&gt;Tim Hall&lt;/a&gt; a while ago (it was this &lt;a href="https://project42.site/create-your-own-rac-cluster-with-virtualbox-vagrant/" rel="noopener noreferrer"&gt;blog very first post&lt;/a&gt;), but I never got to use it too much since they were created to be used with VirtualBox.&lt;/p&gt;

&lt;p&gt;Since I decided to get rid of my old lab and create a new one, I started looking for some options and found and &lt;a href="https://github.com/oracle/vagrant-projects" rel="noopener noreferrer"&gt;Oracle git repository for Vagrant deployments&lt;/a&gt;.&lt;br&gt;
The repository is very complete and the "OracleRAC" deployment was almost perfect of what I wanted to start with, specially the option to use VirtualBox or KVM/libVirt&lt;/p&gt;

&lt;p&gt;After some tests, I decided to fork the Oracle repository and add some changes so I could also learn a bit more about Vagrant and the scripts they added to it (they are very good way to understand how Oracle clusters are deployed or Databases are created)&lt;/p&gt;

&lt;p&gt;If you are looking for a good and simple deployment, please do use the Oracle repository, I'm sharing my fork since they could be people thinking about doing the same and maybe this could help them in the process, but I don't really think I added anything very useful to most people.&lt;br&gt;
Anyway, please have a look to the fork if you think it could be good for you :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Project-42/vagrant-projects/tree/main/OracleRAC" rel="noopener noreferrer"&gt;https://github.com/Project-42/vagrant-projects/tree/main/OracleRAC&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the list of modifications made to the amazing &lt;a href="https://github.com/Project-42/vagrant-projects/tree/main/OracleRAC" rel="noopener noreferrer"&gt;original project&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Second rac cluster added to be deployed independently&lt;/li&gt;
&lt;li&gt;Extra 19c Database created in cluster "rac1" &lt;em&gt;(See "db2_name:/db2_home/pdb2_name" etc.. under "config/vagrant.yml")&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;No databases are created in "rac2" &lt;em&gt;(The intention is to create more scripts to create Standby Databases there)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Extra packages installed &lt;em&gt;(nano highlight git mlocate bash-completion bash-it)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Extra packages to be able to install 11g databases &lt;em&gt;(elfutils-libelf-devel-0&lt;/em&gt; gcc-4*x86_64* gcc-c++-4*x86_64* numactl-devel-2*x86_64*)*&lt;/li&gt;
&lt;li&gt;Changed Diskgroups to have External Redundancy and RDBMS compatibility to 11.2 in RECO case &lt;em&gt;(Seems like you still need to change "_asm_allow_older_clients" to TRUE to be able to install 11g)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Bash profile modified (Current SID configured and pmon processes running)&lt;/li&gt;
&lt;li&gt;oracle user added to sudoers with no password &lt;em&gt;(I know, not very secure, but this is for a test after all)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;DNS 8.8.8.8 added to resolv.conf&lt;/li&gt;
&lt;li&gt;ORCL_software moved to have a central place for both Clusters&lt;/li&gt;
&lt;li&gt;Added extra script to modify oratab file &lt;em&gt;(Not working for second node of the cluster though)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Fred Denis &lt;a href="https://github.com/freddenis/oracle-scripts/" rel="noopener noreferrer"&gt;oracle-scripts&lt;/a&gt; downloaded into &lt;em&gt;/home/$USER/bin&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;sqlcl installed using &lt;a href="https://connor-mcdonald.com/2021/10/29/keeping-my-sqlcl-toasty-fresh/" rel="noopener noreferrer"&gt;Connor Mcdonald "getsqlcl" script&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3gkwef2rpk2683m69oop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3gkwef2rpk2683m69oop.png" alt="P42_Vagrant_RACs" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The way is deployed is the same way than the original one, just need some extra configuration added into "config/vagrant.yml" and allocate Oracle Database 19c Software into "ORCL_software".&lt;/p&gt;

&lt;p&gt;For more info, check the &lt;a href="https://github.com/Project-42/vagrant-projects/blob/main/OracleRAC/README.md" rel="noopener noreferrer"&gt;Readme file&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope you enjoy or at least makes you have a look of how useful Vagrant can be :)&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>vagrant</category>
      <category>devops</category>
    </item>
    <item>
      <title>Remember, 42 was never the Answer</title>
      <dc:creator>Project-42</dc:creator>
      <pubDate>Mon, 11 Oct 2021 10:14:26 +0000</pubDate>
      <link>https://dev.to/project42/remember-42-was-never-the-answer-5h08</link>
      <guid>https://dev.to/project42/remember-42-was-never-the-answer-5h08</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"All right," said Deep Thought. "The Answer to the Great Question..."&lt;br&gt;
"Yes..!"&lt;br&gt;
"Of Life, the Universe and Everything..." said Deep Thought.&lt;br&gt;
"Yes...!"&lt;br&gt;
"Is..." said Deep Thought, and paused.&lt;br&gt;
"Yes...!"&lt;br&gt;
"Is..."&lt;br&gt;
"Yes...!!!...?"&lt;br&gt;
"Forty-two," said Deep Thought, with infinite majesty and calm.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;― Douglas Adams, &lt;a href="https://www.goodreads.com/quotes/4637-o-deep-thought-computer-he-said-the-task-we-have" rel="noopener noreferrer"&gt;The Hitchhiker's Guide to the Galaxy&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
This is probably the most famous quote from  The Hitchhiker’s Guide to the Galaxy and probably the most misleading...&lt;br&gt;
The part that is not that easy to find, is the next part of the conversation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Forty-two!" yelled Loonquawl. "Is that all you've got to show for seven and a half million years' work?"&lt;br&gt;&lt;br&gt;
"I checked it very thoroughly," said the computer, "and that quite definitely is the answer. I think the problem, to be quite honest with you, &lt;strong&gt;is that you've never actually known what the question is&lt;/strong&gt;.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;― Douglas Adams, &lt;a href="https://www.goodreads.com/work/quotes/3078186" rel="noopener noreferrer"&gt;The Hitchhiker's Guide to the Galaxy&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
and that for me is the most beautiful way to say: &lt;br&gt;
without asking the correct questions, you will never find the correct answers.&lt;/p&gt;

&lt;p&gt;If you are reading this, chances are that you just saw &lt;a href="https://twitter.com/hashtag/JoelKallmanDay?src=hashtag_click" rel="noopener noreferrer"&gt;#JoelKallmanDay&lt;/a&gt; around twitter today, a brilliant idea from &lt;a href="https://twitter.com/oraclebase?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor" rel="noopener noreferrer"&gt;Tim Hall&lt;/a&gt; to commemorate Oracle community day. You can learn more about it in his post &lt;a href="https://oracle-base.com/blog/2021/10/04/joel-kallman-day-announcement/" rel="noopener noreferrer"&gt;Joel Kallman Day : Announcement&lt;/a&gt;&lt;br&gt;
Today's post is not about that new feature from 21c, the newest mistake I made trying to change a system parameter, but about joining the Oracle community and keep asking new questions.&lt;/p&gt;

&lt;p&gt;Please continue checking &lt;a href="https://twitter.com/hashtag/JoelKallmanDay?src=hashtag_click" rel="noopener noreferrer"&gt;#JoelKallmanDay&lt;/a&gt;, check for &lt;a href="https://twitter.com/i/lists/1262001490282962950" rel="noopener noreferrer"&gt;Oracle related Twitter lists&lt;/a&gt; to engage with people from the community, check for your local &lt;a href="https://community.oracle.com/tech/apps-infra/groups" rel="noopener noreferrer"&gt;Oracle user groups&lt;/a&gt; to find virtual events, webinars or even presential events and if you like the old fashion blog content, you can start following some of these &lt;a href="https://project42.site/about-me/#:~:text=Oracle%20Blogs%20I%20follow" rel="noopener noreferrer"&gt;great blogs and people&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So today more than ever, let's keep checking for new questions and sharing the knowledge&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>community</category>
      <category>joelkallmanday</category>
      <category>42</category>
    </item>
    <item>
      <title>Creating a Standby on 21c [Single Instance]</title>
      <dc:creator>Project-42</dc:creator>
      <pubDate>Tue, 28 Sep 2021 07:50:58 +0000</pubDate>
      <link>https://dev.to/project42/creating-a-standby-on-21c-single-instance-4l3g</link>
      <guid>https://dev.to/project42/creating-a-standby-on-21c-single-instance-4l3g</guid>
      <description>&lt;p&gt;For this post, I just wanted to test the same DBCA option &lt;a href="https://project42.site/create-single-instance-standby-using-dbca-12-2-version/" rel="noopener noreferrer"&gt;we saw in the past&lt;/a&gt; to create Standby but this time on 21c.&lt;/p&gt;

&lt;p&gt;The first thing I have to clarify is that I will be using rac1-node1 to host the 21c primary database (cdb21) and rac1-node2 to host our new Standby (cdbst21).&lt;/p&gt;

&lt;p&gt;The installation of 21c DB_HOME is as simple as has been for last few versions, so I will skip it (you can see how to do it checking this &lt;a href="[https://project42.site/installing-oracle-21c-database-on-linux-single-instance/](https://project42.site/installing-oracle-21c-database-on-linux-single-instance/)"&gt;21c post&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Once we have the Oracle home, we need to setup tnsnames.ora file for the DBCA to be able to connect to our primary database service.&lt;/p&gt;

&lt;p&gt;If you follow the news, you will notice that 21c is the first version that comes with read-only Oracle Home by default, which makes some of the old files location not possible. You can read more on this from this &lt;a href="[https://www.fernandosimon.com/blog/21c-rooh/](https://www.fernandosimon.com/blog/21c-rooh/)"&gt;Fernando Simon's Post&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For my test, I just copied the tnsnames.ora file I have in the Primary host to the standby host&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="nt"&gt;--&lt;/span&gt; Primary host

&lt;span class="o"&gt;[&lt;/span&gt;oracle@rac1-node1 ~]&lt;span class="nv"&gt;$ &lt;/span&gt;scp &lt;span class="nt"&gt;-pr&lt;/span&gt; /u01/app/oracle/homes/OraDB21Home1/network/admin/tnsnames.ora rac1-node2:/u01/app/oracle/homes/OraDB21Home1/network/admin/tnsnames.ora

tnsnames.ora 100% 408 490.6KB/s 00:00

&lt;span class="o"&gt;[&lt;/span&gt;oracle@rac1-node1 ~]&lt;span class="err"&gt;$&lt;/span&gt;

&lt;span class="nt"&gt;--&lt;/span&gt; Standby host

&lt;span class="o"&gt;[&lt;/span&gt;oracle@rac1-node2 ~]&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /u01/app/oracle/homes/OraDB21Home1/network/admin/tnsnames.ora

&lt;span class="c"&gt;# tnsnames.ora Network Configuration File: /u01/app/oracle/homes/OraDB21Home1/network/admin/tnsnames.ora&lt;/span&gt;

&lt;span class="c"&gt;# Generated by Oracle configuration tools.&lt;/span&gt;

LISTENER_CDB21 &lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;ADDRESS &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;PROTOCOL &lt;span class="o"&gt;=&lt;/span&gt; TCP&lt;span class="o"&gt;)(&lt;/span&gt;HOST &lt;span class="o"&gt;=&lt;/span&gt; rac1-node1&lt;span class="o"&gt;)(&lt;/span&gt;PORT &lt;span class="o"&gt;=&lt;/span&gt; 1521&lt;span class="o"&gt;))&lt;/span&gt;

CDB21 &lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;DESCRIPTION &lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;ADDRESS &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;PROTOCOL &lt;span class="o"&gt;=&lt;/span&gt; TCP&lt;span class="o"&gt;)(&lt;/span&gt;HOST &lt;span class="o"&gt;=&lt;/span&gt; rac1-node1&lt;span class="o"&gt;)(&lt;/span&gt;PORT &lt;span class="o"&gt;=&lt;/span&gt; 1521&lt;span class="o"&gt;))&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;CONNECT_DATA &lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;SERVER &lt;span class="o"&gt;=&lt;/span&gt; DEDICATED&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;SERVICE_NAME &lt;span class="o"&gt;=&lt;/span&gt; cdb21&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;oracle@rac1-node2 ~]&lt;span class="err"&gt;$&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that we got the tnsnames.ora file ready, we can create the standby using dbca.&lt;/p&gt;

&lt;p&gt;The command I will be using is the same that worked back on 12.2 version and that you can see on &lt;a href="[https://project42.site/create-single-instance-standby-using-dbca-12-2-version/](https://project42.site/create-single-instance-standby-using-dbca-12-2-version/)"&gt;this old post&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="o"&gt;[&lt;/span&gt;oracle@rac1-node2 ~]&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; oraenv

ORACLE_SID &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;oracle] ? cdbst21

ORACLE_HOME &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;/home/oracle] ? /u01/app/oracle/product/21.0.0/dbhome_1

The Oracle base has been &lt;span class="nb"&gt;set &lt;/span&gt;to /u01/app/oracle

&lt;span class="o"&gt;[&lt;/span&gt;oracle@rac1-node2 ~]&lt;span class="err"&gt;$&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;oracle@rac1-node2 ~]&lt;span class="nv"&gt;$ &lt;/span&gt;tnsping cdb21

TNS Ping Utility &lt;span class="k"&gt;for &lt;/span&gt;Linux: Version 21.0.0.0.0 - Production on 12-SEP-2021 17:40:12

Copyright &lt;span class="o"&gt;(&lt;/span&gt;c&lt;span class="o"&gt;)&lt;/span&gt; 1997, 2021, Oracle. All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the &lt;span class="nb"&gt;alias

&lt;/span&gt;Attempting to contact &lt;span class="o"&gt;(&lt;/span&gt;DESCRIPTION &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;ADDRESS &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;PROTOCOL &lt;span class="o"&gt;=&lt;/span&gt; TCP&lt;span class="o"&gt;)(&lt;/span&gt;HOST &lt;span class="o"&gt;=&lt;/span&gt; rac1-node1&lt;span class="o"&gt;)(&lt;/span&gt;PORT &lt;span class="o"&gt;=&lt;/span&gt; 1521&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;CONNECT_DATA &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;SERVER &lt;span class="o"&gt;=&lt;/span&gt; DEDICATED&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;SERVICE_NAME &lt;span class="o"&gt;=&lt;/span&gt; cdb21&lt;span class="o"&gt;)))&lt;/span&gt;

OK &lt;span class="o"&gt;(&lt;/span&gt;0 msec&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;oracle@rac1-node2 ~]&lt;span class="err"&gt;$&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;oracle@rac1-node2 ~]&lt;span class="nv"&gt;$ &lt;/span&gt;dbca &lt;span class="nt"&gt;-silent&lt;/span&gt; &lt;span class="nt"&gt;-createDuplicateDB&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;-gdbname&lt;/span&gt; cdb21 &lt;span class="nt"&gt;-sid&lt;/span&gt; cdbst21 &lt;span class="se"&gt;\&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;-initParams&lt;/span&gt; &lt;span class="nv"&gt;db_create_file_dest&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'/u01/oradata/'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;-primaryDBConnectionString&lt;/span&gt; rac1-node1:1521/cdb21 &lt;span class="se"&gt;\&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;-sysPassword&lt;/span&gt; &lt;span class="s2"&gt;"Welcome1"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;-createAsStandby&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;-dbUniqueName&lt;/span&gt; cdbst21

Prepare &lt;span class="k"&gt;for &lt;/span&gt;db operation

22% &lt;span class="nb"&gt;complete

&lt;/span&gt;Listener config step

44% &lt;span class="nb"&gt;complete

&lt;/span&gt;Auxiliary instance creation

67% &lt;span class="nb"&gt;complete

&lt;/span&gt;RMAN duplicate

89% &lt;span class="nb"&gt;complete

&lt;/span&gt;Post duplicate database operations

100% &lt;span class="nb"&gt;complete

&lt;/span&gt;Look at the log file &lt;span class="s2"&gt;"/u01/app/oracle/cfgtoollogs/dbca/cdbst21/cdbst21.log"&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;further details.

&lt;span class="o"&gt;[&lt;/span&gt;oracle@rac1-node2 ~]&lt;span class="err"&gt;$&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order for the primary database to be able to connect to the standby, we need to add the information into the Primary node tnsnames.ora file as you can see below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="o"&gt;[&lt;/span&gt;oracle@rac1-node1 ~]&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /u01/app/oracle/homes/OraDB21Home1/network/admin/tnsnames.ora

&lt;span class="c"&gt;# tnsnames.ora Network Configuration File: /u01/app/oracle/homes/OraDB21Home1/network/admin/tnsnames.ora&lt;/span&gt;

&lt;span class="c"&gt;# Generated by Oracle configuration tools.&lt;/span&gt;

LISTENER_CDB21 &lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;ADDRESS &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;PROTOCOL &lt;span class="o"&gt;=&lt;/span&gt; TCP&lt;span class="o"&gt;)(&lt;/span&gt;HOST &lt;span class="o"&gt;=&lt;/span&gt; rac1-node1&lt;span class="o"&gt;)(&lt;/span&gt;PORT &lt;span class="o"&gt;=&lt;/span&gt; 1521&lt;span class="o"&gt;))&lt;/span&gt;

CDB21 &lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;DESCRIPTION &lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;ADDRESS &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;PROTOCOL &lt;span class="o"&gt;=&lt;/span&gt; TCP&lt;span class="o"&gt;)(&lt;/span&gt;HOST &lt;span class="o"&gt;=&lt;/span&gt; rac1-node1&lt;span class="o"&gt;)(&lt;/span&gt;PORT &lt;span class="o"&gt;=&lt;/span&gt; 1521&lt;span class="o"&gt;))&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;CONNECT_DATA &lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;SERVER &lt;span class="o"&gt;=&lt;/span&gt; DEDICATED&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;SERVICE_NAME &lt;span class="o"&gt;=&lt;/span&gt; cdb21&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;)&lt;/span&gt;

CDBST21 &lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;DESCRIPTION &lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;ADDRESS &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;PROTOCOL &lt;span class="o"&gt;=&lt;/span&gt; TCP&lt;span class="o"&gt;)(&lt;/span&gt;HOST &lt;span class="o"&gt;=&lt;/span&gt; rac1-node2&lt;span class="o"&gt;)(&lt;/span&gt;PORT &lt;span class="o"&gt;=&lt;/span&gt; 1521&lt;span class="o"&gt;))&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;CONNECT_DATA &lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;SERVER &lt;span class="o"&gt;=&lt;/span&gt; DEDICATED&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;(&lt;/span&gt;SERVICE_NAME &lt;span class="o"&gt;=&lt;/span&gt; cdbst21&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;oracle@rac1-node1 ~]&lt;span class="err"&gt;$&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What we have to do now, is to create and enable (yes, I sometimes forget you have to enable it....) our Dataguard configuration on DG broker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="o"&gt;[&lt;/span&gt;oracle@rac1-node1 dbs]&lt;span class="nv"&gt;$ &lt;/span&gt;dgmgrl

DGMGRL &lt;span class="k"&gt;for &lt;/span&gt;Linux: Release 21.0.0.0.0 - Production on Sun Sep 12 17:52:46 2021

Version 21.3.0.0.0

Copyright &lt;span class="o"&gt;(&lt;/span&gt;c&lt;span class="o"&gt;)&lt;/span&gt; 1982, 2021, Oracle and/or its affiliates. All rights reserved.

Welcome to DGMGRL, &lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="s2"&gt;"help"&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;information.

DGMGRL&amp;gt; connect sys/Welcome1@cdb21

Connected to &lt;span class="s2"&gt;"cdb21"&lt;/span&gt;

Connected as SYSDBA.

DGMGRL&amp;gt; CREATE CONFIGURATION DG_BROKER_CONFIG AS PRIMARY DATABASE IS &lt;span class="s2"&gt;"cdb21"&lt;/span&gt; CONNECT IDENTIFIER IS &lt;span class="s2"&gt;"cdb21"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

Connected to &lt;span class="s2"&gt;"cdb21"&lt;/span&gt;

Configuration &lt;span class="s2"&gt;"dg_broker_config"&lt;/span&gt; created with primary database &lt;span class="s2"&gt;"cdb21"&lt;/span&gt;

DGMGRL&amp;gt;

DGMGRL&amp;gt; ADD DATABASE &lt;span class="s2"&gt;"cdbst21"&lt;/span&gt; AS CONNECT IDENTIFIER IS &lt;span class="s2"&gt;"cdbst21"&lt;/span&gt; MAINTAINED AS PHYSICAL&lt;span class="p"&gt;;&lt;/span&gt;

Database &lt;span class="s2"&gt;"cdbst21"&lt;/span&gt; added

DGMGRL&amp;gt;

DGMGRL&amp;gt; show configuration

Configuration - dg_broker_config

Protection Mode: MaxPerformance

Members:

cdb21 - Primary database

cdbst21 - Physical standby database

Fast-Start Failover: Disabled

Configuration Status:

DISABLED

DGMGRL&amp;gt; &lt;span class="nb"&gt;enable &lt;/span&gt;configuration

Enabled.

DGMGRL&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And &lt;strong&gt;&lt;em&gt;voilà!&lt;/em&gt;&lt;/strong&gt;, our 21c Standby is ready for use :)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="nt"&gt;--&lt;/span&gt; Standby Alerlog:

2021-09-12T17:55:55.215081+01:00

TT02 &lt;span class="o"&gt;(&lt;/span&gt;PID:31812&lt;span class="o"&gt;)&lt;/span&gt;: All non-current ORLs have been archived &lt;span class="o"&gt;[&lt;/span&gt;krsy.c:2195]

2021-09-12T17:55:55.229840+01:00

PR00 &lt;span class="o"&gt;(&lt;/span&gt;PID:31769&lt;span class="o"&gt;)&lt;/span&gt;: Media Recovery Log /u01/oradata/CDB21/FRA/CDBST21/archivelog/2021_09_12/o1_mf_1_9_jmwd8on0_.arc &lt;span class="o"&gt;[&lt;/span&gt;krd.c:9408]

2021-09-12T17:55:55.447581+01:00

Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT NODELAY

2021-09-12T17:55:55.733940+01:00

Resize operation completed &lt;span class="k"&gt;for &lt;/span&gt;file# 3, fname /u01/oradata/CDB21/CDBST21/datafile/o1_mf_sysaux_jmwch9nb_.dbf, old size 614400K, new size 634880K

PR00 &lt;span class="o"&gt;(&lt;/span&gt;PID:31769&lt;span class="o"&gt;)&lt;/span&gt;: Media Recovery Waiting &lt;span class="k"&gt;for &lt;/span&gt;T-1.S-10 &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;in &lt;/span&gt;transit&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;krsm.c:6185]

2021-09-12T17:55:55.852791+01:00

Recovery of Online Redo Log: Thread 1 Group 4 Seq 10 Reading mem 0

Mem# 0: /u01/oradata/CDB21/CDBST21/onlinelog/o1_mf_4_jmwcjhq1_.log

Mem# 1: /u01/oradata/CDB21/FRA/CDBST21/onlinelog/o1_mf_4_jmwcjj2p_.log

&lt;span class="nt"&gt;--&lt;/span&gt; Swithed logs on primary to make sure is all fine

SQL&amp;gt; &lt;span class="k"&gt;select &lt;/span&gt;thread#,max&lt;span class="o"&gt;(&lt;/span&gt;sequence#&lt;span class="o"&gt;)&lt;/span&gt; from v&lt;span class="nv"&gt;$archived_log&lt;/span&gt; where first_time &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; sysdate &lt;span class="nt"&gt;-1&lt;/span&gt; and status &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'A'&lt;/span&gt; group by thread# order by thread#&lt;span class="p"&gt;;&lt;/span&gt;

THREAD# MAX&lt;span class="o"&gt;(&lt;/span&gt;SEQUENCE#&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="nt"&gt;----------&lt;/span&gt; &lt;span class="nt"&gt;--------------&lt;/span&gt;

1 9

SQL&amp;gt; alter system archive log current&lt;span class="p"&gt;;&lt;/span&gt;

System altered.

SQL&amp;gt; /

System altered.

SQL&amp;gt; /

System altered.

SQL&amp;gt; &lt;span class="k"&gt;select &lt;/span&gt;thread#,max&lt;span class="o"&gt;(&lt;/span&gt;sequence#&lt;span class="o"&gt;)&lt;/span&gt; from v&lt;span class="nv"&gt;$archived_log&lt;/span&gt; where first_time &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; sysdate &lt;span class="nt"&gt;-1&lt;/span&gt; and status &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'A'&lt;/span&gt; group by thread# order by thread#&lt;span class="p"&gt;;&lt;/span&gt;

THREAD# MAX&lt;span class="o"&gt;(&lt;/span&gt;SEQUENCE#&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="nt"&gt;----------&lt;/span&gt; &lt;span class="nt"&gt;--------------&lt;/span&gt;

1 12

SQL&amp;gt;

2021-09-12T18:01:03.917829+01:00

Recovery of Online Redo Log: Thread 1 Group 5 Seq 12 Reading mem 0

Mem# 0: /u01/oradata/CDB21/CDBST21/onlinelog/o1_mf_5_jmwcjjyj_.log

Mem# 1: /u01/oradata/CDB21/FRA/CDBST21/onlinelog/o1_mf_5_jmwcjk8o_.log

2021-09-12T18:01:08.841412+01:00

rfs &lt;span class="o"&gt;(&lt;/span&gt;PID:32296&lt;span class="o"&gt;)&lt;/span&gt;: Opened LNO:4 &lt;span class="k"&gt;for &lt;/span&gt;DBID:2834326897 B-1080656818.T-1.S-13 &lt;span class="o"&gt;[&lt;/span&gt;krsr.c:18143]

2021-09-12T18:01:08.841639+01:00

ARC2 &lt;span class="o"&gt;(&lt;/span&gt;PID:30356&lt;span class="o"&gt;)&lt;/span&gt;: Archived Log entry 6 added &lt;span class="k"&gt;for &lt;/span&gt;B-1080656818.T-1.S-12 ID 0x7ff9a8eff571 LAD:1 &lt;span class="o"&gt;[&lt;/span&gt;krse.c:4933]

2021-09-12T18:01:08.901532+01:00

PR00 &lt;span class="o"&gt;(&lt;/span&gt;PID:31769&lt;span class="o"&gt;)&lt;/span&gt;: Media Recovery Waiting &lt;span class="k"&gt;for &lt;/span&gt;T-1.S-13 &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;in &lt;/span&gt;transit&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;krsm.c:6185]

2021-09-12T18:01:08.902611+01:00

Recovery of Online Redo Log: Thread 1 Group 4 Seq 13 Reading mem 0

Mem# 0: /u01/oradata/CDB21/CDBST21/onlinelog/o1_mf_4_jmwcjhq1_.log

Mem# 1: /u01/oradata/CDB21/FRA/CDBST21/onlinelog/o1_mf_4_jmwcjj2p_.log

DGMGRL&amp;gt; show database cdbst21

Database - cdbst21

Role: PHYSICAL STANDBY

Intended State: APPLY-ON

Transport Lag: 0 seconds &lt;span class="o"&gt;(&lt;/span&gt;computed 1 second ago&lt;span class="o"&gt;)&lt;/span&gt;

Apply Lag: 0 seconds &lt;span class="o"&gt;(&lt;/span&gt;computed 1 second ago&lt;span class="o"&gt;)&lt;/span&gt;

Average Apply Rate: 30.00 KByte/s

Real Time Query: ON

Instance&lt;span class="o"&gt;(&lt;/span&gt;s&lt;span class="o"&gt;)&lt;/span&gt;:

cdbst21

Database Status:

SUCCESS

DGMGRL&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As mentioned, nothing particular different than didnt work already on previous versions.&lt;/p&gt;

&lt;p&gt;Hope you've enjoyed the post and be ready for more posts about Oracle Database 21c :)&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>oracle</category>
      <category>21c</category>
      <category>database</category>
    </item>
    <item>
      <title>Upgrading Oracle Linux 7 to 8 With Leapp</title>
      <dc:creator>Project-42</dc:creator>
      <pubDate>Tue, 14 Sep 2021 10:46:11 +0000</pubDate>
      <link>https://dev.to/project42/upgrading-oracle-linux-7-to-8-with-leapp-18dh</link>
      <guid>https://dev.to/project42/upgrading-oracle-linux-7-to-8-with-leapp-18dh</guid>
      <description>&lt;p&gt;I was wondering the other day how can I easily upgrade a OL7 to OL8, and looks like Oracle has the exact tool for the process:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.oracle.com/en/operating-systems/oracle-linux/8/leapp/chap-leapp-prep.html" rel="noopener noreferrer"&gt;Oracle® Linux 8 Performing System Upgrades With Leapp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the system I will try to upgrade:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 ~]# &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt; /etc/&lt;span class="k"&gt;*&lt;/span&gt;rel&lt;span class="k"&gt;*&lt;/span&gt;
&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; /etc/oracle-release &amp;lt;&lt;span class="o"&gt;==&lt;/span&gt;
Oracle Linux Server release 7.9

&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; /etc/os-release &amp;lt;&lt;span class="o"&gt;==&lt;/span&gt;
&lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Oracle Linux Server"&lt;/span&gt;

&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; /etc/prelink.conf.d &amp;lt;&lt;span class="o"&gt;==&lt;/span&gt;
&lt;span class="nb"&gt;head&lt;/span&gt;: error reading ‘/etc/prelink.conf.d’: Is a directory

&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; /etc/redhat-release &amp;lt;&lt;span class="o"&gt;==&lt;/span&gt;
Red Hat Enterprise Linux Server release 7.9 &lt;span class="o"&gt;(&lt;/span&gt;Maipo&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; /etc/system-release &amp;lt;&lt;span class="o"&gt;==&lt;/span&gt;
Oracle Linux Server release 7.9

&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; /etc/system-release-cpe &amp;lt;&lt;span class="o"&gt;==&lt;/span&gt;
cpe:/o:oracle:linux:7:9:server
&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 ~]# 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First, we need to make sure boot manager is disabled. Since this is a VM, I can not see a boot manager, so we are clear:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 ~]# bootctl status
System:
   Machine ID: 01a9ea161568458ba5d6f29e505d4c13
      Boot ID: 965df6b728634b0287b3f4059b3c1807


No suitable data is provided by the boot manager. See:
http://www.freedesktop.org/wiki/Software/systemd/BootLoaderInterface
http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec
&lt;span class="k"&gt;for &lt;/span&gt;details.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm the locale is set to en_US.UTF-8&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 ~]# &lt;span class="nb"&gt;cat&lt;/span&gt; /etc/locale.conf
&lt;span class="nv"&gt;LANG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"en_US.UTF-8"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update the system to make sure you are on latest version and all packages are updated and reboot the system&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 ~]# yum update
ol7_UEKR6                                                                                                                                     | 3.0 kB  00:00:00
ol7_addons                                                                                                                                    | 3.0 kB  00:00:00
ol7_developer                                                                                                                                 | 3.0 kB  00:00:00
&lt;span class="o"&gt;[&lt;/span&gt;....]
Updated:
  bind-export-libs.x86_64 32:9.11.4-26.P2.el7_9.7          btrfs-progs.x86_64 0:5.12.1-1.el7               dhclient.x86_64 12:4.2.5-83.0.1.el7_9.1
  dhcp-common.x86_64 12:4.2.5-83.0.1.el7_9.1               dhcp-libs.x86_64 12:4.2.5-83.0.1.el7_9.1        glib2.x86_64 0:2.56.1-9.el7_9
  grub2.x86_64 1:2.02-0.87.0.13.el7_9.6                    grub2-common.noarch 1:2.02-0.87.0.13.el7_9.6    grub2-pc.x86_64 1:2.02-0.87.0.13.el7_9.6
  grub2-pc-modules.noarch 1:2.02-0.87.0.13.el7_9.6         grub2-tools.x86_64 1:2.02-0.87.0.13.el7_9.6     grub2-tools-extra.x86_64 1:2.02-0.87.0.13.el7_9.6
  grub2-tools-minimal.x86_64 1:2.02-0.87.0.13.el7_9.6      gssproxy.x86_64 0:0.7.0-30.el7_9                kernel-tools.x86_64 0:3.10.0-1160.42.2.el7
  kernel-tools-libs.x86_64 0:3.10.0-1160.42.2.el7          kpartx.x86_64 0:0.4.9-135.0.1.el7_9             krb5-libs.x86_64 0:1.15.1-50.0.1.el7
  libxml2.x86_64 0:2.9.1-6.0.3.el7.5                       libxml2-python.x86_64 0:2.9.1-6.0.3.el7.5       libzstd.x86_64 0:1.5.0-1.el7
  linux-firmware.noarch 999:20210617-999.8.git0f66b74b.el7 nfs-utils.x86_64 1:1.3.0-0.68.0.1.el7.1         openldap.x86_64 0:2.4.44-24.el7_9
  oraclelinux-release-el7.x86_64 0:1.0-17.el7              pciutils.x86_64 0:3.5.1-3.0.1.el7               pciutils-libs.x86_64 0:3.5.1-3.0.1.el7
  rsyslog.x86_64 0:8.24.0-57.0.1.el7_9.1                   selinux-policy.noarch 0:3.13.1-268.0.13.el7_9.2 selinux-policy-targeted.noarch 0:3.13.1-268.0.13.el7_9.2

Replaced:
  python-chardet.noarch 0:2.2.1-3.el7

Complete!
&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 ~]#

&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 ~]# reboot

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's install the Oracle Leapp Package now&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 ~]# yum &lt;span class="nb"&gt;install &lt;/span&gt;leapp &lt;span class="nt"&gt;--enablerepo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ol7_leapp,ol7_latest
No package leapp available.
Error: Nothing to &lt;span class="k"&gt;do&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 ~]#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It didn't work at first, but the reason is actually explained by the documentation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.oracle.com/en/operating-systems/oracle-linux/8/leapp/chap-leapp-prep.html#:%7E:text=This%20warning,to%20proceed" rel="noopener noreferrer"&gt;https://docs.oracle.com/en/operating-systems/oracle-linux/8/leapp/chap-leapp-prep.html#:~:text=This%20warning,to%20proceed&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This warning appears if an oracle-linux-ol7.repo file already exists prior to updating the Oracle Linux 7 packages. The update process creates the .rpmnew file to avoid overwriting any customizations that might be in the current file.&lt;/p&gt;

&lt;p&gt;In this case, use the .rpmnew file to guide you in making the necessary modifications to your existing .repo file. Incorporate any new information into your .repo file. The ol7_leapp repository description must be listed in your final oracle-linux-ol7.repo file for the upgrade to proceed."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, what I did was to replace the default .repo file with the new .rpmnew file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]# &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lrth&lt;/span&gt;
total 36K
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; 1 root root  276 Feb 16  2021 oracle-softwarecollection-ol7.repo

&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; 1 root root 4.3K May 31 00:55 oracle-linux-ol7.repo   &lt;span class="o"&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&amp;lt;&amp;lt;

&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; 1 root root 1.1K May 31 00:55 oraclelinux-developer-ol7.repo
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; 1 root root  252 May 31 00:55 oracle-epel-ol7.repo
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; 1 root root  226 Jun  9 03:57 virt-ol7.repo
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; 1 root root 2.6K Jun  9 03:57 uek-ol7.repo

&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; 1 root root 4.5K Jun  9 03:57 oracle-linux-ol7.repo.rpmnew   &lt;span class="o"&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&amp;lt;&amp;lt;


&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]# &lt;span class="nb"&gt;mv &lt;/span&gt;oracle-linux-ol7.repo oracle-linux-ol7.repo.bk
&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]# &lt;span class="nb"&gt;mv &lt;/span&gt;oracle-linux-ol7.repo.rpmnew oracle-linux-ol7.repo
&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It should work now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]# yum &lt;span class="nb"&gt;install &lt;/span&gt;leapp &lt;span class="nt"&gt;--enablerepo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ol7_leapp,ol7_latest
Resolving Dependencies
&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Running transaction check
&lt;span class="nt"&gt;---&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Package leapp.noarch 0:0.12.0-1.0.1.el7_9 will be installed
&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Processing Dependency: python2-leapp &lt;span class="o"&gt;=&lt;/span&gt; 0.12.0-1.0.1.el7_9 &lt;span class="k"&gt;for &lt;/span&gt;package: leapp-0.12.0-1.0.1.el7_9.noarch
&lt;span class="o"&gt;[&lt;/span&gt;....]
Transaction Summary
&lt;span class="o"&gt;=====================================================================================================================================================================&lt;/span&gt;
Install  1 Package &lt;span class="o"&gt;(&lt;/span&gt;+35 Dependent packages&lt;span class="o"&gt;)&lt;/span&gt;

Total download size: 6.1 M
Installed size: 24 M
Is this ok &lt;span class="o"&gt;[&lt;/span&gt;y/d/N]: y
&lt;span class="o"&gt;[&lt;/span&gt;....]
Installed:
  leapp.noarch 0:0.12.0-1.0.1.el7_9

Dependency Installed:
  audit-libs-python.x86_64 0:2.8.5-4.el7                          checkpolicy.x86_64 0:2.5-8.el7                         dnf.noarch 0:4.0.9.2-2.el7
  dnf-data.noarch 0:4.0.9.2-2.el7                                 json-glib.x86_64 0:1.4.2-2.el7                         leapp-deps.noarch 0:0.12.0-1.0.1.el7_9
  leapp-repository.noarch 0:0.13.0-2.0.1.el7_9                    leapp-repository-deps.noarch 0:0.13.0-2.0.1.el7_9      libcgroup.x86_64 0:0.41-21.el7
  libcomps.x86_64 0:0.1.8-14.el7                                  libdnf.x86_64 0:0.22.5-2.el7                           libmodulemd.x86_64 0:1.6.4-1.el7
  librepo.x86_64 0:1.8.1-8.el7_9                                  libreport-filesystem.x86_64 0:2.1.11-53.0.1.el7        librhsm.x86_64 0:0.0.3-3.el7
  libsemanage-python.x86_64 0:2.5-14.el7                          libsolv.x86_64 0:0.6.34-4.el7                          libyaml.x86_64 0:0.1.4-11.el7_0
  policycoreutils-python.x86_64 0:2.5-34.0.1.el7                  python-IPy.noarch 0:0.75-6.el7                         python-backports.x86_64 0:1.0-8.el7
  python-backports-ssl_match_hostname.noarch 0:3.5.0.1-1.el7      python-enum34.noarch 0:1.0.4-1.el7                     python-ipaddress.noarch 0:1.0.16-2.el7
  python-pyudev.noarch 0:0.15-9.el7                               python-requests.noarch 0:2.6.0-10.el7                  python-setuptools.noarch 0:18.0.1-2.el7
  python-six.noarch 0:1.9.0-2.el7                                 python-urllib3.noarch 0:1.10.2-7.el7                   python2-dnf.noarch 0:4.0.9.2-2.el7
  python2-hawkey.x86_64 0:0.22.5-2.el7                            python2-leapp.noarch 0:0.12.0-1.0.1.el7_9              python2-libcomps.x86_64 0:0.1.8-14.el7
  python2-libdnf.x86_64 0:0.22.5-2.el7                            setools-libs.x86_64 0:3.3.8-4.el7

Complete!
&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Preupgrade command will give information about what to expect and any mayor issues before the upgrade (If you are running this in OCI, please check the documentation since you should be using "--oci" instead of "--oraclelinux")&lt;br&gt;
It will also generate a "answerfile" with the changes that needs to be addressed before the upgrade can be executed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]# leapp preupgrade &lt;span class="nt"&gt;--oraclelinux&lt;/span&gt;
&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; Processing phase &lt;span class="sb"&gt;`&lt;/span&gt;configuration_phase&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; ipu_workflow_config
        IPU workflow config actor
&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; Processing phase &lt;span class="sb"&gt;`&lt;/span&gt;FactsCollection&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; system_facts
        Provides data about many facts from system.
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; tcp_wrappers_config_read
        Parse tcp_wrappers configuration files /etc/hosts.&lt;span class="o"&gt;{&lt;/span&gt;allow,deny&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; selinuxcontentscanner
        Scan the system &lt;span class="k"&gt;for &lt;/span&gt;any SELinux customizations
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; scancpu
        Scan CPUs of the machine.
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; root_scanner
        Scan the system root directory and produce a message containing
&lt;span class="o"&gt;[&lt;/span&gt;....]
&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; Processing phase &lt;span class="sb"&gt;`&lt;/span&gt;Reports&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; verify_check_results
        Check all dialogs and notify that user needs to make some choices.
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; verify_check_results
        Check all generated results messages and notify user about them.

&lt;span class="o"&gt;============================================================&lt;/span&gt;
                     UPGRADE INHIBITED
&lt;span class="o"&gt;============================================================&lt;/span&gt;

Upgrade has been inhibited due to the following problems:
    1. Inhibitor: Possible problems with remote login using root account
    2. Inhibitor: Missing required answers &lt;span class="k"&gt;in &lt;/span&gt;the answer file
Consult the pre-upgrade report &lt;span class="k"&gt;for &lt;/span&gt;details and possible remediation.

&lt;span class="o"&gt;============================================================&lt;/span&gt;
                     UPGRADE INHIBITED
&lt;span class="o"&gt;============================================================&lt;/span&gt;


Debug output written to /var/log/leapp/leapp-preupgrade.log

&lt;span class="o"&gt;============================================================&lt;/span&gt;
                           REPORT
&lt;span class="o"&gt;============================================================&lt;/span&gt;

A report has been generated at /var/log/leapp/leapp-report.json
A report has been generated at /var/log/leapp/leapp-report.txt

&lt;span class="o"&gt;============================================================&lt;/span&gt;
                       END OF REPORT
&lt;span class="o"&gt;============================================================&lt;/span&gt;

Answerfile has been generated at /var/log/leapp/answerfile    &lt;span class="o"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&amp;lt;&amp;lt;
&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]#


&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]# &lt;span class="nb"&gt;cat&lt;/span&gt; /var/log/leapp/answerfile
&lt;span class="o"&gt;[&lt;/span&gt;remove_pam_pkcs11_module_check]
&lt;span class="c"&gt;# Title:              None&lt;/span&gt;
&lt;span class="c"&gt;# Reason:             Confirmation&lt;/span&gt;
&lt;span class="c"&gt;# =================== remove_pam_pkcs11_module_check.confirm ==================&lt;/span&gt;
&lt;span class="c"&gt;# Label:              Disable pam_pkcs11 module in PAM configuration? If no, the upgrade process will be interrupted.&lt;/span&gt;
&lt;span class="c"&gt;# Description:        PAM module pam_pkcs11 is no longer available in OL-8 since it was replaced by SSSD.&lt;/span&gt;
&lt;span class="c"&gt;# Type:               bool&lt;/span&gt;
&lt;span class="c"&gt;# Default:            None&lt;/span&gt;
&lt;span class="c"&gt;# Available choices: True/False&lt;/span&gt;
&lt;span class="c"&gt;# Unanswered question. Uncomment the following line with your answer&lt;/span&gt;
&lt;span class="c"&gt;# confirm =&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To be able to execute the upgrade, we now need to resolve the items from "UPGRADE INHIBITED" section.&lt;br&gt;
In my case:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;============================================================&lt;/span&gt;
                     UPGRADE INHIBITED
&lt;span class="o"&gt;============================================================&lt;/span&gt;

Upgrade has been inhibited due to the following problems:
    1. Inhibitor: Possible problems with remote login using root account
    2. Inhibitor: Missing required answers &lt;span class="k"&gt;in &lt;/span&gt;the answer file
Consult the pre-upgrade report &lt;span class="k"&gt;for &lt;/span&gt;details and possible remediation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To "respond" to the answerfile we can use the leapp answer command (you can also modify the answerfile instead as documentation mentions)&lt;br&gt;
I also needed to allow SSH root login, something that I'm not sure should be always necessary, but I understand is better to have it enable at least during the upgrade jut to make sure you don't lose full access to the system during the process (I didn't need to restart SSH service before the upgrade though)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]# leapp answer &lt;span class="nt"&gt;--section&lt;/span&gt; remove_pam_pkcs11_module_check.confirm&lt;span class="o"&gt;=&lt;/span&gt;True
&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]#

&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]# &lt;span class="nb"&gt;grep &lt;/span&gt;PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin &lt;span class="nb"&gt;yes&lt;/span&gt;
&lt;span class="c"&gt;# the setting of "PermitRootLogin without-password".&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once this is done, we can proceed with the upgrade.&lt;br&gt;
It is recommended that you keep a second session logged into the system just in case you lose connectivity.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]# leapp upgrade &lt;span class="nt"&gt;--oraclelinux&lt;/span&gt;
&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; Processing phase &lt;span class="sb"&gt;`&lt;/span&gt;configuration_phase&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; ipu_workflow_config
        IPU workflow config actor
&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; Processing phase &lt;span class="sb"&gt;`&lt;/span&gt;FactsCollection&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; scanclienablerepo
        Produce CustomTargetRepository based on the LEAPP_ENABLE_REPOS &lt;span class="k"&gt;in &lt;/span&gt;config.
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; system_facts
        Provides data about many facts from system.
&lt;span class="o"&gt;[&lt;/span&gt;....]
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; check_skip_phase
        Skip all the subsequent phases &lt;span class="k"&gt;until &lt;/span&gt;the report phase.
&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; Processing phase &lt;span class="sb"&gt;`&lt;/span&gt;TargetTransactionFactsCollection&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; target_userspace_creator
        Initializes a directory to be populated as a minimal environment to run binaries from the target system.
Latest Unbreakable Enterprise Kernel Release 6  5.5 MB/s |  23 MB     00:04
Oracle Linux 8 Application Stream &lt;span class="o"&gt;(&lt;/span&gt;x86_64&lt;span class="o"&gt;)&lt;/span&gt;      6.2 MB/s |  26 MB     00:04
Oracle Linux 8 BaseOS Latest &lt;span class="o"&gt;(&lt;/span&gt;x86_64&lt;span class="o"&gt;)&lt;/span&gt;           6.1 MB/s |  35 MB     00:05
Last metadata expiration check: 0:00:07 ago on Wed Sep  8 12:18:03 2021.
Dependencies resolved.
&lt;span class="o"&gt;================================================================================&lt;/span&gt;
 Package                    Arch   Version              Repository         Size
&lt;span class="o"&gt;================================================================================&lt;/span&gt;
Installing:
 dnf                        noarch 4.4.2-11.el8         ol8_baseos_latest 539 k
Installing dependencies:
 audit-libs                 x86_64 3.0-0.17.20191104git1c2f876.el8
                                                        ol8_baseos_latest 116 k
 basesystem                 noarch 11-5.el8             ol8_baseos_latest  10 k
 bash                       x86_64 4.4.20-1.el8_4       ol8_baseos_latest 1.5 M
 brotli                     x86_64 1.0.6-3.el8          ol8_baseos_latest 323 k
&lt;span class="o"&gt;[&lt;/span&gt;....]
tzdata                     noarch 2021a-1.el8          ol8_baseos_latest 473 k
 xz-libs                    x86_64 5.2.4-3.el8          ol8_baseos_latest  94 k
 zlib                       x86_64 1.2.11-17.el8        ol8_baseos_latest 102 k

Transaction Summary
&lt;span class="o"&gt;================================================================================&lt;/span&gt;
Install  123 Packages

Total download size: 77 M
Installed size: 598 M
Downloading Packages:
&lt;span class="o"&gt;(&lt;/span&gt;1/123&lt;span class="o"&gt;)&lt;/span&gt;: basesystem-11-5.el8.noarch.rpm         138 kB/s |  10 kB     00:00
&lt;span class="o"&gt;(&lt;/span&gt;2/123&lt;span class="o"&gt;)&lt;/span&gt;: brotli-1.0.6-3.el8.x86_64.rpm          1.9 MB/s | 323 kB     00:00
&lt;span class="o"&gt;(&lt;/span&gt;3/123&lt;span class="o"&gt;)&lt;/span&gt;: bzip2-libs-1.0.6-26.el8.x86_64.rpm     1.2 MB/s |  48 kB     00:00
&lt;span class="o"&gt;(&lt;/span&gt;4/123&lt;span class="o"&gt;)&lt;/span&gt;: audit-libs-3.0-0.17.20191104git1c2f876 245 kB/s | 116 kB     00:00
&lt;span class="o"&gt;(&lt;/span&gt;5/123&lt;span class="o"&gt;)&lt;/span&gt;: ca-certificates-2020.2.41-80.0.el8_2.n 1.9 MB/s | 391 kB     00:00
&lt;span class="o"&gt;(&lt;/span&gt;6/123&lt;span class="o"&gt;)&lt;/span&gt;: bash-4.4.20-1.el8_4.x86_64.rpm         3.1 MB/s | 1.5 MB     00:00
&lt;span class="o"&gt;[&lt;/span&gt;....]
&lt;span class="o"&gt;(&lt;/span&gt;391/393&lt;span class="o"&gt;)&lt;/span&gt;: btrfs-progs-5.12.1-1.el8.x86_64.rpm  1.6 MB/s | 858 kB     00:00
&lt;span class="o"&gt;(&lt;/span&gt;392/393&lt;span class="o"&gt;)&lt;/span&gt;: xfsprogs-5.4.0-1.0.1.el8.x86_64.rpm  1.5 MB/s | 1.1 MB     00:00
&lt;span class="o"&gt;(&lt;/span&gt;393/393&lt;span class="o"&gt;)&lt;/span&gt;: linux-firmware-20210617-999.8.git0f6 4.8 MB/s | 178 MB     00:36
&lt;span class="nt"&gt;--------------------------------------------------------------------------------&lt;/span&gt;
Total                                           6.2 MB/s | 374 MB     01:00
Running transaction check
Transaction check succeeded.
Running transaction &lt;span class="nb"&gt;test
&lt;/span&gt;Transaction &lt;span class="nb"&gt;test &lt;/span&gt;succeeded.
Complete!
The downloaded packages were saved &lt;span class="k"&gt;in &lt;/span&gt;cache &lt;span class="k"&gt;until &lt;/span&gt;the next successful transaction.
You can remove cached packages by executing &lt;span class="s1"&gt;'dnf clean packages'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; Processing phase &lt;span class="sb"&gt;`&lt;/span&gt;InterimPreparation&lt;span class="sb"&gt;`&lt;/span&gt;
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; efi_interim_fix
        Adjust EFI boot entry &lt;span class="k"&gt;for &lt;/span&gt;first reboot
&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; initram_disk_generator
        Creates the upgrade initram disk

&lt;span class="o"&gt;====&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; add_upgrade_boot_entry
        Add new boot entry &lt;span class="k"&gt;for &lt;/span&gt;Leapp provided initramfs.
A reboot is required to &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; Please reboot your system.


Debug output written to /var/log/leapp/leapp-upgrade.log

&lt;span class="o"&gt;============================================================&lt;/span&gt;
                           REPORT
&lt;span class="o"&gt;============================================================&lt;/span&gt;

A report has been generated at /var/log/leapp/leapp-report.json
A report has been generated at /var/log/leapp/leapp-report.txt

&lt;span class="o"&gt;============================================================&lt;/span&gt;
                       END OF REPORT
&lt;span class="o"&gt;============================================================&lt;/span&gt;

Answerfile has been generated at /var/log/leapp/answerfile
&lt;span class="o"&gt;[&lt;/span&gt;root@OL7 yum.repos.d]#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once completed, reboot the system.&lt;br&gt;
The system will now apply all the changes for the upgrade, so it will take some time to start.&lt;br&gt;
If you have console connection, is recommended to have it open in order to see what is going on.&lt;/p&gt;

&lt;p&gt;And &lt;strong&gt;&lt;em&gt;voilà!&lt;/em&gt;&lt;/strong&gt;, we can see how the system is now upgraded:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;vagrant@OL7 ~]&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt; /etc/&lt;span class="k"&gt;*&lt;/span&gt;rel&lt;span class="k"&gt;*&lt;/span&gt;
&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; /etc/oracle-release &amp;lt;&lt;span class="o"&gt;==&lt;/span&gt;
Oracle Linux Server release 8.4

&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; /etc/os-release &amp;lt;&lt;span class="o"&gt;==&lt;/span&gt;
&lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Oracle Linux Server"&lt;/span&gt;

&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; /etc/prelink.conf.d &amp;lt;&lt;span class="o"&gt;==&lt;/span&gt;
&lt;span class="nb"&gt;head&lt;/span&gt;: error reading &lt;span class="s1"&gt;'/etc/prelink.conf.d'&lt;/span&gt;: Is a directory

&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; /etc/redhat-release &amp;lt;&lt;span class="o"&gt;==&lt;/span&gt;
Red Hat Enterprise Linux release 8.4 &lt;span class="o"&gt;(&lt;/span&gt;Ootpa&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; /etc/system-release &amp;lt;&lt;span class="o"&gt;==&lt;/span&gt;
Oracle Linux Server release 8.4

&lt;span class="o"&gt;==&amp;gt;&lt;/span&gt; /etc/system-release-cpe &amp;lt;&lt;span class="o"&gt;==&lt;/span&gt;
cpe:/o:oracle:linux:8:4:server
&lt;span class="o"&gt;[&lt;/span&gt;vagrant@OL7 ~]&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Have a look at some Post-upgrade tasks from the documentation&lt;br&gt;
&lt;a href="https://docs.oracle.com/en/operating-systems/oracle-linux/8/leapp/post-upgrade.html" rel="noopener noreferrer"&gt;Completing Post Upgrade Tasks&lt;/a&gt; after the process so you make sure you have the system in the best conditions.&lt;/p&gt;

&lt;p&gt;In any case, looks like a good tool to do some upgrading, but make sure you double check the pre-upgrade report and never do it on your production systems without proper testing :)&lt;/p&gt;

</description>
      <category>linux</category>
      <category>tutorial</category>
      <category>upgrade</category>
      <category>oracle</category>
    </item>
    <item>
      <title>How to install Oracle Linux Automation Manager (aka “Oracle Ansible Tower”)</title>
      <dc:creator>Project-42</dc:creator>
      <pubDate>Wed, 08 Sep 2021 11:31:51 +0000</pubDate>
      <link>https://dev.to/project42/how-to-install-oracle-linux-automation-manager-aka-oracle-ansible-tower-20i7</link>
      <guid>https://dev.to/project42/how-to-install-oracle-linux-automation-manager-aka-oracle-ansible-tower-20i7</guid>
      <description>&lt;p&gt;If you follow the right Oracle people, you probably already know that Oracle just released Oracle Linux Automation Manager:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your &lt;a href="https://twitter.com/hashtag/Ansible?src=hash&amp;amp;ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;#Ansible&lt;/a&gt; automation engine might be already there, included with your Oracle Linux subscription... &lt;a href="https://t.co/RPZw37yOvs" rel="noopener noreferrer"&gt;https://t.co/RPZw37yOvs&lt;/a&gt; &lt;a href="https://t.co/aQZInFcUsv" rel="noopener noreferrer"&gt;pic.twitter.com/aQZInFcUsv&lt;/a&gt;&lt;/p&gt;— Ludovico Caldara (&lt;a class="mentioned-user" href="https://dev.to/ludodba"&gt;@ludodba&lt;/a&gt;) &lt;a href="https://twitter.com/ludodba/status/1434868683428360195?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;September 6, 2021&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;My understanding was that access to it required ULN access, so there was no way to just spin up a quick VM at home and try it out... but I was wrong.&lt;/p&gt;

&lt;p&gt;As confirmed by &lt;a href="https://twitter.com/ludodba" rel="noopener noreferrer"&gt;Ludovico&lt;/a&gt;, there is public access:&lt;/p&gt;

&lt;blockquote data-conversation="none"&gt;
&lt;p&gt;I might have talked too early, it looks like a public repo is also available:&lt;a href="https://t.co/XxZhs9oFDi" rel="noopener noreferrer"&gt;https://t.co/XxZhs9oFDi&lt;/a&gt;&lt;/p&gt;— Ludovico Caldara (&lt;a class="mentioned-user" href="https://dev.to/ludodba"&gt;@ludodba&lt;/a&gt;) &lt;a href="https://twitter.com/ludodba/status/1435187045127839747?ref_src=twsrc%5Etfw" rel="noopener noreferrer"&gt;September 7, 2021&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;I thought I will keep it simple for now, so I just created a VM with Vagrant and confirm you can test it out from home from that public repository.&lt;/p&gt;

&lt;p&gt;First, add and enable the Automation public repository to your system:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# dnf config-manager &lt;span class="nt"&gt;--add-repo&lt;/span&gt; http://yum.oracle.com/repo/OracleLinux/OL8/automation/x86_64
Adding repo from: http://yum.oracle.com/repo/OracleLinux/OL8/automation/x86_64


&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]#  dnf repolist
repo &lt;span class="nb"&gt;id                                                       &lt;/span&gt;repo name
ol8_UEKR6                                                     Latest Unbreakable Enterprise Kernel Release 6 &lt;span class="k"&gt;for &lt;/span&gt;Oracle Linux 8 &lt;span class="o"&gt;(&lt;/span&gt;x86_64&lt;span class="o"&gt;)&lt;/span&gt;
ol8_appstream                                                 Oracle Linux 8 Application Stream &lt;span class="o"&gt;(&lt;/span&gt;x86_64&lt;span class="o"&gt;)&lt;/span&gt;
ol8_baseos_latest                                             Oracle Linux 8 BaseOS Latest &lt;span class="o"&gt;(&lt;/span&gt;x86_64&lt;span class="o"&gt;)&lt;/span&gt;
yum.oracle.com_repo_OracleLinux_OL8_automation_x86_64         created by dnf config-manager from http://yum.oracle.com/repo/OracleLinux/OL8/automation/x86_64
&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# dnf config-manager &lt;span class="nt"&gt;--set-enabled&lt;/span&gt; yum.oracle.com_repo_OracleLinux_OL8_automation_x86_64


&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# dnf update
created by dnf config-manager from http://yum.oracle.com/repo/OracleLinux/OL8/automation/x86_64                                      108 kB/s | 437 kB     00:04
Last metadata expiration check: 0:00:01 ago on Tue 07 Sep 2021 07:35:18 PM UTC.
Dependencies resolved.
&lt;span class="o"&gt;=====================================================================================================================================================================&lt;/span&gt;
 Package                                     Architecture            Version                                                Repository                          Size
&lt;span class="o"&gt;=====================================================================================================================================================================&lt;/span&gt;
Installing:
 kernel-uek                                  x86_64                  5.4.17-2102.204.4.4.el8uek                             ol8_UEKR6                           66 M
Upgrading:
 NetworkManager                              x86_64                  1:1.30.0-10.0.1.el8_4                                  ol8_baseos_latest                  2.6 M
 NetworkManager-libnm                        x86_64                  1:1.30.0-10.0.1.el8_4                                  ol8_baseos_latest                  1.8 M
 btrfs-progs                                 x86_64                  5.12.1-1.el8                                           ol8_UEKR6                          858 k
 dhcp-client                                 x86_64                  12:4.3.6-44.el8_4.1                                    ol8_baseos_latest                  318 k
 dhcp-common                                 noarch                  12:4.3.6-44.el8_4.1                                    ol8_baseos_latest                  207 k
 dhcp-libs                                   x86_64                  12:4.3.6-44.el8_4.1                                    ol8_baseos_latest                  148 k
 dmidecode                                   x86_64                  1:3.2-8.0.2.el8                                        ol8_baseos_latest                   92 k
&lt;span class="o"&gt;[&lt;/span&gt;....]
  nvme-cli-1.12-4.el8_4.x86_64                               openldap-2.4.46-17.el8_4.x86_64                        oraclelinux-release-el8-1.0-19.el8.x86_64
  procps-ng-3.3.15-6.0.1.el8.x86_64                          python3-firewall-0.8.2-7.0.1.el8_4.noarch              python3-rpm-4.14.3-14.el8_4.x86_64
  rpm-4.14.3-14.el8_4.x86_64                                 rpm-build-libs-4.14.3-14.el8_4.x86_64                  rpm-libs-4.14.3-14.el8_4.x86_64
  rpm-plugin-selinux-4.14.3-14.el8_4.x86_64                  rpm-plugin-systemd-inhibit-4.14.3-14.el8_4.x86_64      rsyslog-8.1911.0-7.0.1.el8_4.2.x86_64
  selinux-policy-3.14.3-67.0.6.el8_4.1.noarch                selinux-policy-targeted-3.14.3-67.0.6.el8_4.1.noarch   systemd-239-45.0.2.el8_4.3.x86_64
  systemd-libs-239-45.0.2.el8_4.3.x86_64                     systemd-pam-239-45.0.2.el8_4.3.x86_64                  systemd-udev-239-45.0.2.el8_4.3.x86_64
  virt-what-1.18-9.el8_4.x86_64
Installed:
  kernel-uek-5.4.17-2102.204.4.4.el8uek.x86_64

Complete!
&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After we update the system, we can search for the automation manager package&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# dnf search automation-manager
Last metadata expiration check: 0:07:57 ago on Tue 07 Sep 2021 07:35:18 PM UTC.
&lt;span class="o"&gt;=================================================================&lt;/span&gt; Name Matched: automation-manager &lt;span class="o"&gt;==================================================================&lt;/span&gt;
ol-automation-manager.src : Oracle Linux Automation Manager, based on AWX, provides a web-based user interface, REST API, and task engine built on top of Ansible.
ol-automation-manager.x86_64 : Oracle Linux Automation Manager, based on AWX, provides a web-based user interface, REST API, and task engine built on top of Ansible.
oraclelinux-automation-manager-release-el8.src : Oracle Linux Automation Manager yum repository configuration
oraclelinux-automation-manager-release-el8.x86_64 : Oracle Linux Automation Manager yum repository configuration
&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The automation package installation is fairly simple (for a default/test configuration, of course) and you can see an example below copied from the Oracle documentation:&lt;br&gt;
&lt;a href="https://docs.oracle.com/en/operating-systems/oracle-linux/8/oracle-linux-automation-manager/awx-install.html#install-intro" rel="noopener noreferrer"&gt;Installing Oracle Linux Automation Manager&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# dnf &lt;span class="nb"&gt;install &lt;/span&gt;ol-automation-manager
Last metadata expiration check: 0:09:39 ago on Tue 07 Sep 2021 07:35:18 PM UTC.
Dependencies resolved.
&lt;span class="o"&gt;=====================================================================================================================================================================&lt;/span&gt;
 Package                            Architecture Version                                           Repository                                                   Size
&lt;span class="o"&gt;=====================================================================================================================================================================&lt;/span&gt;
Installing:
 ol-automation-manager              x86_64       1.0.0-1.el8                                       yum.oracle.com_repo_OracleLinux_OL8_automation_x86_64        67 M
Installing dependencies:
 aajohan-comfortaa-fonts            noarch       3.001-2.el8                                       ol8_baseos_latest                                           148 k
 ansible                            noarch       2.9.23-1.el8                                      yum.oracle.com_repo_OracleLinux_OL8_automation_x86_64        17 M
 bzip2                              x86_64       1.0.6-26.el8                                      ol8_baseos_latest                                            60 k
 checkpolicy                        x86_64       2.9-1.el8                                         ol8_baseos_latest                                           346 k
 emacs-filesystem                   noarch       1:26.1-5.el8                                      ol8_baseos_latest                                            69 k
 fontconfig                         x86_64       2.13.1-3.el8                                      ol8_baseos_latest                                           274 k
 fontpackages-filesystem            noarch       1.44-22.el8                                       ol8_baseos_latest                                            16 k
 gd                                 x86_64       2.2.5-7.el8                                       ol8_appstream                                               144 k
&lt;span class="o"&gt;[&lt;/span&gt;...]

  redis-5.0.3-2.module+el8.0.0.z+5250+19ca22c8.x86_64                                   sos-4.0-11.0.1.el8.noarch
  sshpass-1.06-9.el8.x86_64                                                             supervisor-4.2.2-1.el8.noarch
  uwsgi-2.0.18-4.0.1.el8.x86_64                                                         xmlsec1-1.2.25-4.el8.x86_64
  xmlsec1-openssl-1.2.25-4.el8.x86_64

Complete!
&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we need to setup the configuration using AWX user. &lt;br&gt;
Again, just following the documentation example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# &lt;span class="nb"&gt;cat&lt;/span&gt; /etc/redis.conf
&lt;span class="o"&gt;[&lt;/span&gt;...]
unixsocket /var/run/redis/redis.sock 
unixsocketperm 775

&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# /var/lib/ol-automation-manager/ol-automation-manager-DB-init.sh
 &lt;span class="k"&gt;*&lt;/span&gt; Initializing database &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="s1"&gt;'/var/lib/pgsql/data'&lt;/span&gt;
 &lt;span class="k"&gt;*&lt;/span&gt; Initialized, logs are &lt;span class="k"&gt;in&lt;/span&gt; /var/lib/pgsql/initdb_postgresql.log
Database pre-setup is completed
&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]#

&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# su &lt;span class="nt"&gt;-l&lt;/span&gt; awx &lt;span class="nt"&gt;-s&lt;/span&gt; /bin/bash


&lt;span class="o"&gt;[&lt;/span&gt;awx@OracleAuto ~]&lt;span class="nv"&gt;$ &lt;/span&gt;awx-manage migrate
Operations to perform:
  Apply all migrations: auth, conf, contenttypes, main, oauth2_provider, sessions, sites, social_django, sso, taggit
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying taggit.0001_initial... OK
  Applying taggit.0002_auto_20150616_2121... OK
  Applying auth.0001_initial... OK
  Applying main.0001_initial... OK
  Applying main.0002_squashed_v300_release... OK
  Applying main.0003_squashed_v300_v303_updates... OK
  Applying main.0004_squashed_v310_release... OK
  Applying conf.0001_initial... OK
  Applying conf.0002_v310_copy_tower_settings... OK
  Applying main.0005_squashed_v310_v313_updates... OK
  Applying main.0006_v320_release... OK
  Applying main.0007_v320_data_migrations... OK
  Applying main.0008_v320_drop_v1_credential_fields... OK
  Applying main.0009_v322_add_setting_field_for_activity_stream... OK
&lt;span class="o"&gt;[&lt;/span&gt;....]

  Applying social_django.0002_add_related_name... OK
  Applying social_django.0003_alter_email_max_length... OK
  Applying social_django.0004_auto_20160423_0400... OK
  Applying social_django.0005_auto_20160727_2333... OK
  Applying social_django.0006_partial... OK
  Applying social_django.0007_code_timestamp... OK
  Applying social_django.0008_partial_timestamp... OK
  Applying sso.0001_initial... OK
  Applying sso.0002_expand_provider_options... OK
  Applying taggit.0003_taggeditem_add_unique_index... OK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's now create the management user and make sure you set the correct hostname/IP address for the "AWX Instance provision"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;awx@OracleAuto ~]&lt;span class="nv"&gt;$ &lt;/span&gt;awx-manage createsuperuser &lt;span class="nt"&gt;--username&lt;/span&gt; admin
Email address: admin@test.com
Password:
Password &lt;span class="o"&gt;(&lt;/span&gt;again&lt;span class="o"&gt;)&lt;/span&gt;:
Superuser created successfully.
&lt;span class="o"&gt;[&lt;/span&gt;awx@OracleAuto ~]&lt;span class="err"&gt;$&lt;/span&gt;


&lt;span class="o"&gt;[&lt;/span&gt;awx@OracleAuto ~]&lt;span class="nv"&gt;$ &lt;/span&gt;awx-manage create_preload_data
Default organization added.
Demo Credential, Inventory, and Job Template added.
&lt;span class="o"&gt;(&lt;/span&gt;changed: True&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;awx@OracleAuto ~]&lt;span class="nv"&gt;$ &lt;/span&gt;awx-manage provision_instance &lt;span class="nt"&gt;--hostname&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;OracleAuto
Successfully registered instance OracleAuto
&lt;span class="o"&gt;(&lt;/span&gt;changed: True&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;awx@OracleAuto ~]&lt;span class="nv"&gt;$ &lt;/span&gt;awx-manage register_queue &lt;span class="nt"&gt;--queuename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tower &lt;span class="nt"&gt;--hostnames&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;OracleAuto
Creating instance group tower
Added instance OracleAuto to tower
&lt;span class="o"&gt;(&lt;/span&gt;changed: True&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;awx@OracleAuto ~]&lt;span class="err"&gt;$&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;awx@OracleAuto ~]&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;exit
logout&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once that is completed, we need to setup the HTTP server. &lt;br&gt;
Since this is just a test, you can just create a ssl certicate to avoid issues login into your management interface (please, dont do this on your produciton system :) )&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# openssl req &lt;span class="nt"&gt;-x509&lt;/span&gt; &lt;span class="nt"&gt;-nodes&lt;/span&gt; &lt;span class="nt"&gt;-days&lt;/span&gt; 365 &lt;span class="nt"&gt;-newkey&lt;/span&gt; rsa:2048 &lt;span class="nt"&gt;-keyout&lt;/span&gt; /etc/tower/tower.key &lt;span class="nt"&gt;-out&lt;/span&gt; /etc/tower/tower.crt
Generating a RSA private key
......+++++
.+++++
writing new private key to &lt;span class="s1"&gt;'/etc/tower/tower.key'&lt;/span&gt;
&lt;span class="nt"&gt;-----&lt;/span&gt;
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter &lt;span class="s1"&gt;'.'&lt;/span&gt;, the field will be left blank.
&lt;span class="nt"&gt;-----&lt;/span&gt;
Country Name &lt;span class="o"&gt;(&lt;/span&gt;2 letter code&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;XX]:
State or Province Name &lt;span class="o"&gt;(&lt;/span&gt;full name&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;:
Locality Name &lt;span class="o"&gt;(&lt;/span&gt;eg, city&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Default City]:
Organization Name &lt;span class="o"&gt;(&lt;/span&gt;eg, company&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Default Company Ltd]:
Organizational Unit Name &lt;span class="o"&gt;(&lt;/span&gt;eg, section&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;:
Common Name &lt;span class="o"&gt;(&lt;/span&gt;eg, your name or your server&lt;span class="s1"&gt;'s hostname) []:
Email Address []:
[root@OracleAuto ~]#
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I'm sure you can change the web server to your favourite one, but for now, we will setup nginx server that is the default one.&lt;br&gt;
Here, we just made a backup of the default configuration and copied the default configuration from the documentation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# &lt;span class="nb"&gt;mv&lt;/span&gt; /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bk
&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# nano /etc/nginx/nginx.conf

&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# &lt;span class="nb"&gt;cat&lt;/span&gt; /etc/nginx/nginx.conf
user nginx&lt;span class="p"&gt;;&lt;/span&gt;
worker_processes auto&lt;span class="p"&gt;;&lt;/span&gt;
error_log /var/log/nginx/error.log&lt;span class="p"&gt;;&lt;/span&gt;
pid /run/nginx.pid&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c"&gt;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.&lt;/span&gt;
include /usr/share/nginx/modules/&lt;span class="k"&gt;*&lt;/span&gt;.conf&lt;span class="p"&gt;;&lt;/span&gt;

events &lt;span class="o"&gt;{&lt;/span&gt;
    worker_connections 1024&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

http &lt;span class="o"&gt;{&lt;/span&gt;
    log_format  main  &lt;span class="s1"&gt;'$remote_addr - $remote_user [$time_local] "$request" '&lt;/span&gt;
                      &lt;span class="s1"&gt;'$status $body_bytes_sent "$http_referer" '&lt;/span&gt;
                      &lt;span class="s1"&gt;'"$http_user_agent" "$http_x_forwarded_for"'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    access_log  /var/log/nginx/access.log  main&lt;span class="p"&gt;;&lt;/span&gt;

    sendfile            on&lt;span class="p"&gt;;&lt;/span&gt;
    tcp_nopush          on&lt;span class="p"&gt;;&lt;/span&gt;
    tcp_nodelay         on&lt;span class="p"&gt;;&lt;/span&gt;
    keepalive_timeout   65&lt;span class="p"&gt;;&lt;/span&gt;
    types_hash_max_size 2048&lt;span class="p"&gt;;&lt;/span&gt;

    include             /etc/nginx/mime.types&lt;span class="p"&gt;;&lt;/span&gt;
    default_type        application/octet-stream&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c"&gt;# Load modular configuration files from the /etc/nginx/conf.d directory.&lt;/span&gt;
    &lt;span class="c"&gt;# See http://nginx.org/en/docs/ngx_core_module.html#include&lt;/span&gt;
    &lt;span class="c"&gt;# for more information.&lt;/span&gt;
    include /etc/nginx/conf.d/&lt;span class="k"&gt;*&lt;/span&gt;.conf&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Last steps, just change some information on the tower setting file (just add your hostname/IP into CLUSTER_HOST_ID) and enable/start the Oracle Automation Manager Service with Systemd&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; CLUSTER_HOST_ID /etc/tower/settings.py
CLUSTER_HOST_ID &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"OracleAuto"&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]#

&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]# systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; ol-automation-manager.service
Created symlink /etc/systemd/system/multi-user.target.wants/ol-automation-manager.service → /usr/lib/systemd/system/ol-automation-manager.service.
&lt;span class="o"&gt;[&lt;/span&gt;root@OracleAuto ~]#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And &lt;strong&gt;&lt;em&gt;voilà!&lt;/em&gt;&lt;/strong&gt; you can now start managing your ansible playbooks directly from Oracle Automation Manager Interface&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F061cmfbiy6krcmleog1h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F061cmfbiy6krcmleog1h.png" alt="Alt Text" width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwm7o6cuf2hdyulikwoxi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwm7o6cuf2hdyulikwoxi.png" alt="Alt Text" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
&lt;br&gt;
I really need to get more into Ansible and Automation, so this is could be a good way to start using Oracle own Automation manager :)&lt;/p&gt;

</description>
      <category>ansible</category>
      <category>tutorial</category>
      <category>oracle</category>
      <category>awx</category>
    </item>
  </channel>
</rss>
