Back to School for DevOps: When 65 GiB Free Is Not Enough


I have used Fedora on my primary machine long enough to see it grow up with me. The rescue initramfs on this ThinkPad is dated 26 December 2020—the original Fedora 33 installation. The same installation is now running Fedora 44, with 7.2.x kernels in /boot.

That longevity is one reason I remain a RHEL/Fedora enthusiast. It also makes the machine a useful reminder that infrastructure knowledge is not replaced by writing YAML. A Senior DevOps role still needs filesystem, storage, packaging, and failure-analysis skills. The declarative layer is valuable; it is not the whole system.

…
Read more ⟶

The Quest for a Secure Wi-Fi AP on Linux (Realtek Edition)


I recently set out to turn my ThinkCentre into a high-security wireless access point. My goal was simple: spin up a dedicated AP for my VR setup using modern WPA3-SAE security.

The hardware? A Realtek RTL8822CE. The result? A lesson in Linux driver limitations.

If you are trying to force WPA3 on a Realtek card and seeing supplicant-timeout errors, this guide is for you. Here is how I hit the wall, and the “Maximum Security” WPA2 configuration I used to fix it while staying FIPS-compliant.

…
Read more ⟶

Building a 4TB Video Storage Stack on Fedora (Transmission + SMB)


I recently added a 4TB Seagate IronWolf HDD to my ThinkCentre Server to serve as a dedicated video storage and torrenting machine. To get the most out of the spinning rust, I needed a setup that minimizes fragmentation and network latency.

Here is the complete, non-interactive configuration guide for Fedora 43 Server, moving from a raw disk to a fully tuned streaming stack. All commands are executed as root.

The Hardware

  • Disk: Seagate IronWolf 4TB (SATA, 5400RPM)
  • OS: Fedora Linux 43 (Server Edition)
  • Mount Point: /srv/TORRENT

Step 1: Partitioning & Formatting

Since the drive is larger than 2TB, we must use GPT. We use sgdisk for non-interactive partitioning and mkfs.ext4 with specific flags to optimize for large video files.

…
Read more ⟶

Github Action Tips


how to debug events

- name: debig GitHub context
  env:
    GITHUB_CONTEXT: ${{ toJson(github) }}
  run: |
    echo "$GITHUB_CONTEXT"
- name: debig GitHub context
  run: cat /home/runner/work/_temp/_github_workflow/event.json

how to run build steps with own custom container

Sometimes you have to run integration tests with own container which contains all devel-dependecies you need. Something crazy like this:

name: Pull Request Workflow
on:
  ...

env:
  ...

jobs:
  own-container-jobs:
    runs-on: ubuntu-latest
    container: docker.io/yourpublicaccount/builder-container:1.0.0
    services:
      postgres:
        ...
      redis:
        ...

    steps:
      - name: Check out repository code
        uses: actions/checkout@v2

      - uses: actions/cache@v2
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ hashFiles('*/requirements/path.txt') }}

      - name: Build seed VENV
        run: |
          # export PATH needs only if we have to build Psycopg2
          # Psycopg2 uses pg_config to find the libraries at build time
          export PATH=/usr/pgsql-10/bin:$PATH
          cd seed_dir
          python3.6 -m venv venv
          ./venv/bin/pip install -r requirements/path.txt

      - name: Seed DB
        run: |
          cd seed_dir
          ./venv/bin/python ...
          ./venv/bin/alembic ...

      - name: Build work VENV
        run: |
          cd work_dir
          python3.8 -m venv venv
          ./venv/bin/pip install -r requirements/path.txt

      - name: Run tests
        run: |
          cd work_dir
          ./venv/bin/pytest -v

If your contaner runs as a non-root user, you need to add some github-related things. See comments bellow.

…
Read more ⟶