Illustrative WIUNIX Academy storage studio with Kate, a laptop, storage racks and a DEMO S3 diagram.

WIUNIX ACADEMY

MinIO after archival: a private S3 lab from pinned source

Build archived MinIO source in an isolated container; verify private TLS, bucket-scoped access, versioning and a synthetic object round trip, with current support limits.

Intermediate60 min readUpdated
Make this guide yours

YOUR SYSTEM. YOUR STEPS.

Where are you working?

Choose your OS and version. The prerequisites, commands and troubleshooting follow your environment.

Debian13Reviewed against official documentation ·

USE YOUR OWN VALUES

Configure this tutorial

Set the example values for your environment; related explanations and copy panels update together. Never enter passwords, private keys or tokens. Values stay in this tab and are not sent to the server or share links. Check actual DNS, certificates and network policy before running commands.

Different IP addresses, domains or ports? Open the settings below, change the values and select “Apply to tutorial”, then copy the updated commands.

Set values for my environment6 editable values

THE OUTCOME

What will you have at the end?

Verify S3 behavior safely before choosing a maintained operational path.

01S3 API127.0.0.1:19000 · TLS → academy-objects/probe
02Console127.0.0.1:19001 · private namespace
03Storageacademy-minio-lab · /srv/academy-minio · versions ≠ backup
Supported operating systems and versions

Archived unsupported source; isolated evaluation only. Common Ubuntu24.04 fixture, other userspaces documented.

Before you begin

  • Disposable x86_64 VM; Podman already installed.
  • 3GiB RAM,5GiB free container storage; no real data.

MinIO in2026: assess availability before deployment

This practical guide is for Linux operators evaluating an existing S3 integration. You will build a pinned archival MinIO server and client, use separate loopback API and console ports, issue one bucket-scoped application identity, exercise versions and export/reimport a synthetic object. Allow about60 minutes after downloads/build dependencies; compilation time varies.

The official minio/minio repository was archived on25 April2026 and its README says it is no longer maintained. The latest release API reports RELEASE.2025-10-15T17-29-55Z with no attached assets. Direct legacy binary retrieval returned410 and the public Quay latest lookup returned unauthorized during this review. An old image in a local cache proves neither current availability nor maintenance.

The reproducible path here is the still-accessible official source archive at commit7aac2a2c5b7c882e68c1ce017d8256be2feea27f, built with a checked Go toolchain. This is an unsupported archived-source learning lab, not a maintained Community production deployment. A new build does not fix known or future vulnerabilities in frozen source. The archived mc client is separately pinned. No fork or paid edition is silently substituted.

Edit public values, Apply, then copy

Open the collapsed settings, change values, select Apply to tutorial, then copy. Dirty or invalid values disable copying. academy-minio-lab is a new container, /srv/academy-minio its exclusive private directory, API19000 and console19001 are distinct internal ports, academy-objects is the test bucket and probe is its simple object filename. A second bucket adds the fixed -outside suffix. Use a short lowercase S3-compatible bucket name and a simple lowercase filename; the executable preflight applies narrower storage rules than a generic identifier field.

Keep the lab inside a disposable namespace

Use a disposable x86_64 Linux VM with working Podman, internet access,3GiB available RAM and at least5GiB free container storage. Podman is a prerequisite, not installed by these commands. The container has private networking and no published host port or host directory mount. All later package/build/service commands run inside its shell as container root. This is containment for a lab, not a hardened production runtime.

Ubuntu26.10 is the reviewed stable default. Ubuntu26.04/24.04 LTS and Debian13/12 are alternative container userspaces. Only Ubuntu24.04 common runtime was exercised; other paths are documented. The host kernel, architecture, Podman support and rootless UID mappings remain separate requirements.

Public settings/custom progress live in sessionStorage for this tab/language/article/environment; default progress uses localStorage. Personalization does not execute a test. Never enter credentials in settings or share URLs. Root and application keys are created directly in protected files and remain inside this disposable lab.

01

LET’S BUILD

Start one new container without host ports

Run this panel on the disposable VM host. The name guard refuses an existing container. The final command opens its interactive shell; stay there until the stop step. An empty port listing is expected. The distribution image supplies userspace only; it contains no MinIO vendor binary.

bash

Disposable VM host · terminal

set -eu
test "$(uname -m)" = x86_64
if podman container exists 'academy-minio-lab'; then
  printf '%s
' 'Container name already exists; stop here.' >&2
  exit 1
fi
podman run --detach --name 'academy-minio-lab' --network private   --memory 3g --cpus 2 docker.io/library/debian:13 sleep infinity
podman port 'academy-minio-lab'
podman exec -it 'academy-minio-lab' bash
How do I know it worked?

New academy-minio-lab running; no host mappings; shell is inside the selected userspace.

02

LET’S BUILD

Install only container build prerequisites

Check the actual distribution before installation. These packages do not install a MinIO service or change host packages. Python handles verified archives and protected files; OpenSSL issues a short-lived lab certificate. Keep the container isolated after fetching build inputs.

bash

Inside the disposable container · terminal

set -eu
. /etc/os-release
test "$ID" = debian && test "$VERSION_ID" = 13
apt-get update
apt-get install --no-install-recommends ca-certificates curl python3 openssl nano
python3 --version
python3 -c "import tarfile; assert hasattr(tarfile,'data_filter'), 'Python extraction data filter required; stop if unavailable'"
openssl version
How do I know it worked?

Python/OpenSSL versions print in the selected container.

03

LET’S BUILD

Reserve private paths, ports and S3 names

Only a new /srv/academy-minio is accepted. Parent directories must exist, be root-owned, not writable by other users and contain no symlink. Existing directories/files stop the command. Port probing detects current conflicts; the server repeats the check at launch because a probe cannot reserve a port indefinitely.

bash

Inside the disposable container · terminal

set -eu
python3 - <<'PY'
import os,stat,socket,shutil,re
from pathlib import Path
r=Path('/srv/academy-minio')
assert r.is_absolute() and len(r.parts)>2
assert re.fullmatch(r'[a-z][a-z0-9-]{1,30}[a-z0-9]','academy-objects'), 'Use a lowercase S3 bucket name,3-32 chars'
assert re.fullmatch(r'[a-z][a-z0-9_-]{0,31}','probe'), 'Use a simple lowercase object name'
for p in reversed(r.parents):
    m=p.lstat()
    assert stat.S_ISDIR(m.st_mode) and m.st_uid==0 and not m.st_mode & 0o022, 'Unsafe parent'
for port in (19000,19001):
    with socket.socket() as s: s.bind(('127.0.0.1',port))
assert shutil.disk_usage(r.parent).free > 5*1024**3, 'Need 5GiB free'
r.mkdir(mode=0o700)
for n in ('downloads','bin','certs','data','private','root-client','app-client','run','backup','restored'):
    (r/n).mkdir(mode=0o700)
for n in ('provision.go','start.py'):
    fd=os.open(r/n,os.O_WRONLY|os.O_CREAT|os.O_EXCL|os.O_NOFOLLOW,0o600);os.close(fd)
print('New private lab root; ports free; no files replaced')
PY
How do I know it worked?

Private /srv/academy-minio created; both internal ports free and5GiB available.

Explore all tutorials ↗