DEV Community

Cover image for The Cable: How a €12 adapter turned a laptop into infrastructure
Panagis Tzivras
Panagis Tzivras

Posted on

The Cable: How a €12 adapter turned a laptop into infrastructure

Frankie was alive. But Frankie was not yet a server. This is the story of the cable that changed the verdict.

The adapter arrived on a Tuesday

I had ordered it from a local electronics shop in Argostoli. USB 3.0 to Ethernet. Realtek chipset. The clerk did not ask what it was for. I did not explain that a 2008 MacBook Air was waiting for it.

I powered Frankie down, plugged the adapter into the USB port, ran an Ethernet cable to the router, and powered back on.

The kernel saw it immediately. A new interface appeared. DHCP fired. I opened a terminal.

ping -c 100 8.8.8.8
Enter fullscreen mode Exit fullscreen mode

One hundred packets sent. One hundred received. Zero percent loss. Round-trip times under two milliseconds. The same router that had given Frankie nine percent loss over WiFi now gave perfect reliability over copper.

The b43 driver was no longer in the critical path.

I configured a static DHCP reservation on the router so Frankie would always get the same local address. Then I tested the one thing that mattered.

I ran the backup script.

It SSHed into the Oracle VM. It checked disk space. It checked load average. It streamed a pg_dump over the encrypted tunnel. Four minutes later, a 132 MB file sat on Frankie's disk, verified with pg_restore, containing every table, every spatial index, every road segment and building footprint in the ARGOS : : twin.

I ran it again. It passed. I ran it a third time. It passed. I deleted the test files and ran it a fourth time, this time with the full cron environment exported, mimicking the minimal shell that cron provides at 04:00.

It passed.

The wall was down.

Headless

With a reliable network path, Frankie could finally become what it was meant to be. I changed the default boot target from graphical to multi-user. Cold boot. The screen showed a text login prompt. No LXQt desktop. No wallpaper. No mouse cursor.

I closed the lid. The machine kept running. No sleep. No suspend. No lit panel generating heat in a closed chassis. The machine stands vertically on the table, exhaust side down, so the fan can pull air through without cooking the chips. mbpfan manages speed based on temperature sensor readings. Core temperatures stayed in the sixties. The NVIDIA 9400M GPU idled without a display server asking it to render anything.

From the Windows laptop across the room, I opened an SSH session. All three services responded. Then I opened X2Go. The remote desktop connected. X2Go creates its own session. It does not need a local GUI to exist. Frankie was headless and accessible at the same time.

Reversibility is preserved. If I need a local GUI for maintenance, one command brings it back without changing the default. If something goes seriously wrong, GRUB recovery mode leads to a root shell. The transformation is not a prison. It is a preference.

The services

Three things now run on Frankie.

File sync. Syncthing bridges Frankie and the development laptop. I tested it with a project image, synced it across, then deleted it on the source. The file survived in a versioned archive with a timestamp suffix. Sync proven. Recovery proven. The bridge is solid.

Git mirror. Gitea runs under a dedicated system user, backed by SQLite.

The backup. The script runs daily at 04:00. It connects to the cloud VM, streams the full PostGIS database, writes to a temporary file, verifies the dump with a restore listing, and only then atomically promotes it to a final archive. The previous good dump survives until the replacement is proven. Four manual test runs passed. The first unattended cron run is the real examination.

The infrastructure, right now

  • Local dev: Frankie, 2008 MacBook Air, Lubuntu, headless, USB Ethernet, mbpfan tuned to 55/60
  • File sync: Syncthing, versioned, tested
  • Git mirror: Gitea
  • Backup: Daily pg_dump from Oracle VM, atomic promotion, four test runs passed
  • Production database: Oracle Cloud VM, PostGIS 16, pgRouting
  • Site: Cloudflare Pages, global CDN
  • Tiles: GitHub Pages, PMTiles
  • Builds: GitHub Codespaces

There is no procurement department. There is no EU grant. There is one person, a vertical laptop on a table, and a €12 cable that turned a waiting machine into a server.

The lesson

Frankie was never going to be fast. A Core 2 Duo with under 2 GB of usable RAM will not run Docker. It will not compile a spatial index. It will not serve map tiles to a thousand users.

But Frankie does not need to be fast. Frankie needs to be reliable. And reliability, on this hardware, is a design problem, not a purchasing problem.

The b43 WiFi ceiling forced the Ethernet adapter. The slow CPU forced lightweight services. The limited RAM forced careful process management. Each constraint removed an option and sharpened the design.

Six months ago, this machine was headed for recycling. The WiFi was broken. The trackpad was erratic. The battery held minutes. The screen had lines.

Today it stands vertically on a table next to the router, lid closed, running three services, safeguarding a database, mirroring a repository, and syncing files across devices. It will never be fast. It does not need to be. It needs to do one job, reliably, while the island sleeps.

The backup script runs tonight at 04:00. We will know tomorrow morning if the safeguard actually safeguards.


Frankie is alive. Frankie is a server. And if you walk past that table at four in the morning, the only light you will see is the Ethernet port blinking next to the router. 🤖

Top comments (0)