πŸ” Same App on Many Machines? One Script Finds Every Copy, Updates It, Undoes a Failed One

[β– β– β– β– β– β– β– β– β– β– ] Run the same app on several machines? This script finds every copy by itself, updates them one by one, and undoes any update that fails β€” built for FreeLLMAPI gateways on Proxmox, works for anything installed from Git

:package: BCBC-FreeLLMAPI-Rolling-Updater-20260912.zip (7.1 KB) β€” the script, the README, the ticket from the verified run, the SHA-256.

Install one app on eight machines and updating means a list of eight. Add a ninth, forget the list, and that one quietly stays old. This script keeps no list.

Each copy was installed from Git, so it carries its source address. The script opens every running container on the Proxmox host, reads that address, and updates only the ones that say FreeLLMAPI. No container numbers typed anywhere.

   every running container ──▢ source address says FreeLLMAPI? ──▢ has local edits? leave it alone.
                                                                          β”‚
                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β–Ό
   save a snapshot to return to ──▢ update the code ──▢ install ──▢ build ──▢ start the app
                              β”‚
                              β–Ό
   service up? Β· port answers? Β· "I'm alive" page answers?  ──▢ βœ… next container
                                                            ──▢ ❌ stop, return this one to its snapshot

:repeat_button: One container at a time, so the other copies keep working while one updates.

:receipt: The verified run found eight gateways on its own and finished all eight. Each prints its old and new version, for example:

PASS: CT 132 - bcbc-gateway-alt-132
OLD:  b235b7e8…   NEW:  65c7d2f9…   HTTP health: PASS /livez

:gear: For your own app: change two lines, the source address it matches and the β€œI’m alive” page it checks. Everything else stays.

:straight_ruler: Two rules built in: a container with hand-made changes is skipped, never overwritten. Dependencies update through the normal install, never through a forced audit fix.

:link: The router this maintains, and how people here chain free providers through it: Free Token Limits.

Let the updater find its own copies. A list is the copy you forget.

Credits: Mikey_LikesIT + ChatGPT

5 Likes