OS Tools: TTYD, Dumbwhois and n8n

Published: May 13, 2025 by Isaac Johnson

Today we’ll look at three self-hosted Open-Source tools; TTYD, Dumbwhois and n8n.

We will use ttyd to serve up an interactive terminal on a webpage as well as show how we can expose a non-interactive btop on an SSL https site with a URL giving us a rather cool dashboard.

I’ll show how to fire up Dumbwhois on docker. This is a rather small app so I won’t go into much details.

Lastly, we’ll dig into n8n and really just scratch the surface on this powerful pipelining tool (I was way off when I started on what this tool was about).

TTYD

A while back this TecMint article came through my feed and focused on TTYD, a simple TTY server that can run locally or in a container.

We can easily install with homebrew

$ brew install ttyd
==> Auto-updating Homebrew...
Adjust how often this is run with HOMEBREW_AUTO_UPDATE_SECS or disable with
HOMEBREW_NO_AUTO_UPDATE. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Downloading https://ghcr.io/v2/homebrew/portable-ruby/portable-ruby/blobs/sha256:1764a2629da860b95afc96704725ec7c4cdb333724a9066ccc41ca6c55aa4f62
################################################################################################################################################################################################################################################### 100.0%
==> Pouring portable-ruby-3.4.3.x86_64_linux.bottle.tar.gz
==> Auto-updated Homebrew!
Updated 4 taps (oven-sh/bun, derailed/k9s, homebrew/core and homebrew/cask).
==> New Formulae
ab-av1                              decompose                           gdown                               jaguar                              mob                                 prog8                               terraform-module-versions
adaptivecpp                         dish                                geesefs                             jenkins-cli                         multi-gitter                        projectable                         tfcmt
add-determinism                     dockcheck                           girara                              kbld                                newsraft                            protobuf@29                         tfmv
alloy                               dockerfmt                           git-graph                           keyutils                            nip4                                protoc-gen-doc                      tfsort
anubis                              easyeda2kicad                       git-who                             krep                                nmstatectl                          pyp                                 tmex
anyquery                            elfio                               github-mcp-server                   ktexttemplate                       node-red                            ra-multiplex                        tsui
apache-flink@1                      ente-cli                            gnome-online-accounts               kubernetes-cli@1.32                 opkssh                              rasterio                            twitch-cli
api-linter                          erlfmt                              goimports                           lavat                               otel-cli                            readerwriterqueue                   uhubctl
bkmr                                excalidraw-converter                grafana-alloy                       leetgo                              otterdog                            rofi                                umockdev
block-goose-cli                     fabric-ai                           gtree                               libgoa                              oven-sh/bun/bun@1.2.10              sacad                               undercutf1
brename                             falcosecurity-libs                  gut                                 libgudev                            oven-sh/bun/bun@1.2.11              sentry-native                       unoserver
buffrs                              fedify                              harsh                               libpg_query                         oven-sh/bun/bun@1.2.12              sequoia-chameleon-gnupg             veccore
camlpdf                             ferron                              hexd                                lld@19                              oven-sh/bun/bun@1.2.5               sexpect                             wrkflw
cargo-shear                         fiona                               hjson                               llvm@19                             oven-sh/bun/bun@1.2.6               shuttle                             x-cmd
cargo-sort                          fortran-stdlib                      hub-tool                            lume                                oven-sh/bun/bun@1.2.7               statesmith                          xan
cargo-spellcheck                    fpm                                 iccmax                              mani                                oven-sh/bun/bun@1.2.8               swiftly                             xtl
chdig                               ftxui                               icu4c@77                            marmite                             oven-sh/bun/bun@1.2.9               tdom                                yalantinglibs
cpp-lazy                            gama                                infat                               mcpm                                physunits                           technitium-dns                      yeet
darklua                             gamdl                               intermodal                          mender-artifact                     policy-engine                       technitium-library                  yutu
dblab                               gcr                                 is-fast                             miniflux                            preevy                              terraform-iam-policy-validator      zlib-rs

You have 44 outdated formulae installed.

==> Downloading https://ghcr.io/v2/homebrew/core/ttyd/manifests/1.7.7_2
################################################################################################################################################################################################################################################### 100.0%
==> Fetching dependencies for ttyd: json-c, ca-certificates, openssl@3, libevent, libuv, libwebsockets, libunistring, acl, icu4c@77, libxml2, gettext, libsodium, lua, sqlite, libffi, ruby, gdbm, perl and vim
==> Downloading https://ghcr.io/v2/homebrew/core/json-c/manifests/0.18
################################################################################################################################################################################################################################################### 100.0%
==> Fetching json-c
==> Downloading https://ghcr.io/v2/homebrew/core/json-c/blobs/sha256:6afd63b22756b317e0dd21aa71644f47ec11996366bc60c8d5c9306f87044caa
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/ca-certificates/manifests/2025-02-25
################################################################################################################################################################################################################################################### 100.0%
==> Fetching ca-certificates
==> Downloading https://ghcr.io/v2/homebrew/core/ca-certificates/blobs/sha256:8f46fb05f753f80f2bc398c0a24b10d680bd77d496e2b931de0b61998e37aebc
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/manifests/3.5.0
################################################################################################################################################################################################################################################### 100.0%
==> Fetching openssl@3
==> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/blobs/sha256:178ae44b213319b0aa9e6d7b41772705099f50bd6b5de4ba1e6ae526e25af37a
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/libevent/manifests/2.1.12_1
################################################################################################################################################################################################################################################### 100.0%
==> Fetching libevent
==> Downloading https://ghcr.io/v2/homebrew/core/libevent/blobs/sha256:83ef4ce689a91f6fca013d6b4b0b2fcda3706080f8e0cccd056a3d94d6bc0f17
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/libuv/manifests/1.51.0
################################################################################################################################################################################################################################################### 100.0%
==> Fetching libuv
==> Downloading https://ghcr.io/v2/homebrew/core/libuv/blobs/sha256:dd1d243f009617c2ff2d97c5cd08a93512f93accf7d7c1987a649db2b91ac03e
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/libwebsockets/manifests/4.3.5
################################################################################################################################################################################################################################################### 100.0%
==> Fetching libwebsockets
==> Downloading https://ghcr.io/v2/homebrew/core/libwebsockets/blobs/sha256:a5baeb55111964b22daeb1bcc9138d7835999ee92e836eaac24fb616859dc654
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/libunistring/manifests/1.3
################################################################################################################################################################################################################################################### 100.0%
==> Fetching libunistring
==> Downloading https://ghcr.io/v2/homebrew/core/libunistring/blobs/sha256:25ff65379463fe4a51008a36c45a963ebc8d13d054ce606e3fbb6635ea634311
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/acl/manifests/2.3.2-2
################################################################################################################################################################################################################################################### 100.0%
==> Fetching acl
==> Downloading https://ghcr.io/v2/homebrew/core/acl/blobs/sha256:65c9042358cb23a7510fb0a52f938e5b4e48d32c1a19c756165c6c814dd5146e
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/icu4c/77/manifests/77.1
################################################################################################################################################################################################################################################### 100.0%
==> Fetching icu4c@77
==> Downloading https://ghcr.io/v2/homebrew/core/icu4c/77/blobs/sha256:f82d4ca07fbdcf99cb5553ae9cf298bbff475a465f13e1c5d934dcbcb1e14741
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/libxml2/manifests/2.13.7
################################################################################################################################################################################################################################################### 100.0%
==> Fetching libxml2
==> Downloading https://ghcr.io/v2/homebrew/core/libxml2/blobs/sha256:7382946d0327ddf4f76756475423920797d6c5fd5c57a42d6e7dc6da38abe576
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/gettext/manifests/0.24.1
################################################################################################################################################################################################################################################### 100.0%
==> Fetching gettext
==> Downloading https://ghcr.io/v2/homebrew/core/gettext/blobs/sha256:f4218be546b32da338235b35633cbedbb4e315ef83b2222d345fb85f74fa4cb7
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/libsodium/manifests/1.0.20
################################################################################################################################################################################################################################################### 100.0%
==> Fetching libsodium
==> Downloading https://ghcr.io/v2/homebrew/core/libsodium/blobs/sha256:94394d217dc5a833492a702a8a9e914573a945da13f3b4f42b59f2513835f439
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/lua/manifests/5.4.7
################################################################################################################################################################################################################################################### 100.0%
==> Fetching lua
==> Downloading https://ghcr.io/v2/homebrew/core/lua/blobs/sha256:9e21c57b663809dfdbf18aa773bac852c0206c728e73daab48767c60bb8b1a7c
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/sqlite/manifests/3.49.1
################################################################################################################################################################################################################################################### 100.0%
==> Fetching sqlite
==> Downloading https://ghcr.io/v2/homebrew/core/sqlite/blobs/sha256:988cd498cfd373e932dadd1893ef46b8b2ef11cdb12f802260a362dbd3e8942b
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/libffi/manifests/3.4.8
################################################################################################################################################################################################################################################### 100.0%
==> Fetching libffi
==> Downloading https://ghcr.io/v2/homebrew/core/libffi/blobs/sha256:c3dd4f7ce49728e37e9f8f868a8b85bdca6279b2f7781feb96b9e4bb400c18a0
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/ruby/manifests/3.4.3
################################################################################################################################################################################################################################################### 100.0%
==> Fetching dependencies for ruby: gperf
==> Downloading https://ghcr.io/v2/homebrew/core/gperf/manifests/3.3
################################################################################################################################################################################################################################################### 100.0%
==> Fetching gperf
==> Downloading https://ghcr.io/v2/homebrew/core/gperf/blobs/sha256:b89551d7e9b6af83d8ff495b7ec376cbf0b73c37b39ee90a4164a115496cd11e
################################################################################################################################################################################################################################################### 100.0%
==> Fetching ruby
==> Downloading https://ghcr.io/v2/homebrew/core/ruby/blobs/sha256:e2d2ed80d9a01a34ad96a3c2370b5430a9bf22de03aae18bd0fe847a9d29a6b8
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/gdbm/manifests/1.25
################################################################################################################################################################################################################################################### 100.0%
==> Fetching gdbm
==> Downloading https://ghcr.io/v2/homebrew/core/gdbm/blobs/sha256:7bb95130a0f0f4a3c938f798edb331abae374db148ed14fa080568c5db95cfef
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/perl/manifests/5.40.2
################################################################################################################################################################################################################################################### 100.0%
==> Fetching dependencies for perl: expat
==> Downloading https://ghcr.io/v2/homebrew/core/expat/manifests/2.7.1
################################################################################################################################################################################################################################################### 100.0%
==> Fetching expat
==> Downloading https://ghcr.io/v2/homebrew/core/expat/blobs/sha256:58ff2ade2b1d0b3de72558f92507b8bfc9bdcdc2fce5c5e33e080dfffff9b83c
################################################################################################################################################################################################################################################### 100.0%
==> Fetching perl
==> Downloading https://ghcr.io/v2/homebrew/core/perl/blobs/sha256:018804347f6d231ea705e0b43c0d9ef6f996d9432697146dcce7fb65a8c3787f
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/vim/manifests/9.1.1350
################################################################################################################################################################################################################################################### 100.0%
==> Fetching dependencies for vim: xz and python@3.13
==> Downloading https://ghcr.io/v2/homebrew/core/xz/manifests/5.8.1
################################################################################################################################################################################################################################################### 100.0%
==> Fetching xz
==> Downloading https://ghcr.io/v2/homebrew/core/xz/blobs/sha256:9ee1ff38fcc213fdefd262be65a06669f3e0118a2bd5fb387147ebe884f94413
################################################################################################################################################################################################################################################### 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/python/3.13/manifests/3.13.3-1
################################################################################################################################################################################################################################################### 100.0%
==> Fetching python@3.13
==> Downloading https://ghcr.io/v2/homebrew/core/python/3.13/blobs/sha256:fbca800b2b6c5b7ffbf00167ae9375990ab2a747ed038b0410bc3dee41816e50
################################################################################################################################################################################################################################################### 100.0%
==> Fetching vim
==> Downloading https://ghcr.io/v2/homebrew/core/vim/blobs/sha256:07a0885927640a66dfe8038210e1990d76386e8305817ef5bfe57ad3e74a85fa
################################################################################################################################################################################################################################################### 100.0%
==> Fetching ttyd
==> Downloading https://ghcr.io/v2/homebrew/core/ttyd/blobs/sha256:7bddc259bdafc9182b5f33d160aca7d9b010782e0c9a69421ac873f1f0a6542c
################################################################################################################################################################################################################################################### 100.0%
==> Installing dependencies for ttyd: json-c, ca-certificates, openssl@3, libevent, libuv, libwebsockets, libunistring, acl, icu4c@77, libxml2, gettext, libsodium, lua, sqlite, libffi, ruby, gdbm, perl and vim
==> Installing ttyd dependency: json-c
==> Downloading https://ghcr.io/v2/homebrew/core/json-c/manifests/0.18
Already downloaded: /home/builder/.cache/Homebrew/downloads/2b1b57d90168111a85e505e96c756a6a792ae692fdab1cb092422bece9724f89--json-c-0.18.bottle_manifest.json
==> Pouring json-c--0.18.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/json-c/0.18: 34 files, 440.2KB
==> Installing ttyd dependency: ca-certificates
==> Downloading https://ghcr.io/v2/homebrew/core/ca-certificates/manifests/2025-02-25
Already downloaded: /home/builder/.cache/Homebrew/downloads/6c1debb525d4dc6007afae4cd2b772105111632b22fc28506550f6dfe27c6d52--ca-certificates-2025-02-25.bottle_manifest.json
==> Pouring ca-certificates--2025-02-25.all.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/ca-certificates/2025-02-25: 4 files, 251.4KB
==> Installing ttyd dependency: openssl@3
==> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/manifests/3.5.0
Already downloaded: /home/builder/.cache/Homebrew/downloads/d3c8243df37f69247721b1d8a6c51e1a8afd6664b832423921ffd99bb2bb381a--openssl@3-3.5.0.bottle_manifest.json
==> Pouring openssl@3--3.5.0.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/openssl@3/3.5.0: 7,573 files, 42.5MB
==> Installing ttyd dependency: libevent
==> Downloading https://ghcr.io/v2/homebrew/core/libevent/manifests/2.1.12_1
Already downloaded: /home/builder/.cache/Homebrew/downloads/68b113f9ab63db45f4e1860de522ce2ca4fa081eb3c0d5c7d6005a35c3cf8d06--libevent-2.1.12_1.bottle_manifest.json
==> Pouring libevent--2.1.12_1.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/libevent/2.1.12_1: 63 files, 2.6MB
==> Installing ttyd dependency: libuv
==> Downloading https://ghcr.io/v2/homebrew/core/libuv/manifests/1.51.0
Already downloaded: /home/builder/.cache/Homebrew/downloads/25bd9f2f86d047011dc8ca247bea2e4e3e5a150e29648418d48dfca4c8c136ea--libuv-1.51.0.bottle_manifest.json
==> Pouring libuv--1.51.0.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/libuv/1.51.0: 21 files, 1.4MB
==> Installing ttyd dependency: libwebsockets
==> Downloading https://ghcr.io/v2/homebrew/core/libwebsockets/manifests/4.3.5
Already downloaded: /home/builder/.cache/Homebrew/downloads/ed8351a6b8469e8e1b95eeb7a99a5472b4cbbdeb66ba1435a295d6d8a86458fb--libwebsockets-4.3.5.bottle_manifest.json
==> Pouring libwebsockets--4.3.5.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/libwebsockets/4.3.5: 116 files, 2.7MB
==> Installing ttyd dependency: libunistring
==> Downloading https://ghcr.io/v2/homebrew/core/libunistring/manifests/1.3
Already downloaded: /home/builder/.cache/Homebrew/downloads/a570da63bc1839c7e217f203abd54d4d873ebd6b99f6e88994d0e79e2ebe987c--libunistring-1.3.bottle_manifest.json
==> Pouring libunistring--1.3.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/libunistring/1.3: 60 files, 6.0MB
==> Installing ttyd dependency: acl
==> Downloading https://ghcr.io/v2/homebrew/core/acl/manifests/2.3.2-2
Already downloaded: /home/builder/.cache/Homebrew/downloads/e2f6a812e1ba69fc81acd3fa2801d7b46e8af60ba8b946f3e78d861b8b515c9f--acl-2.3.2-2.bottle_manifest.json
==> Pouring acl--2.3.2.x86_64_linux.bottle.2.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/acl/2.3.2: 71 files, 727.4KB
==> Installing ttyd dependency: icu4c@77
==> Downloading https://ghcr.io/v2/homebrew/core/icu4c/77/manifests/77.1
Already downloaded: /home/builder/.cache/Homebrew/downloads/35ec2c3adb94255ba47424a4334da9616d97e1ec6d59ed907b368535018bed0a--icu4c@77-77.1.bottle_manifest.json
==> Pouring icu4c@77--77.1.x86_64_linux.bottle.tar.gz
Unlinking /home/linuxbrew/.linuxbrew/Cellar/icu4c@76/76.1_1... 63 symlinks removed.
🍺  /home/linuxbrew/.linuxbrew/Cellar/icu4c@77/77.1: 277 files, 89.0MB
==> Installing ttyd dependency: libxml2
==> Downloading https://ghcr.io/v2/homebrew/core/libxml2/manifests/2.13.7
Already downloaded: /home/builder/.cache/Homebrew/downloads/be9f4502af1c7d9846e8cf5774eec1302d0daa7c4a3f97d9c26c10548497b5ce--libxml2-2.13.7.bottle_manifest.json
==> Pouring libxml2--2.13.7.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/libxml2/2.13.7: 136 files, 7MB
==> Installing ttyd dependency: gettext
==> Downloading https://ghcr.io/v2/homebrew/core/gettext/manifests/0.24.1
Already downloaded: /home/builder/.cache/Homebrew/downloads/6c5ce63bd49865b139af74449c6fa5e8291f75053a9a44079bb2c3efdddbfe26--gettext-0.24.1.bottle_manifest.json
==> Pouring gettext--0.24.1.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/gettext/0.24.1: 2,276 files, 25.6MB
==> Installing ttyd dependency: libsodium
==> Downloading https://ghcr.io/v2/homebrew/core/libsodium/manifests/1.0.20
Already downloaded: /home/builder/.cache/Homebrew/downloads/a9a9a2e1207e214070682a14f6470fb686cbb6ba7c24c2c747c0ca0663f42557--libsodium-1.0.20.bottle_manifest.json
==> Pouring libsodium--1.0.20.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/libsodium/1.0.20: 79 files, 1.3MB
==> Installing ttyd dependency: lua
==> Downloading https://ghcr.io/v2/homebrew/core/lua/manifests/5.4.7
Already downloaded: /home/builder/.cache/Homebrew/downloads/d2210560a2e24627c19106d7d878e251812e5f4f990c9fe13887746bfd4d7a21--lua-5.4.7.bottle_manifest.json
==> Pouring lua--5.4.7.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/lua/5.4.7: 30 files, 1.4MB
==> Installing ttyd dependency: sqlite
==> Downloading https://ghcr.io/v2/homebrew/core/sqlite/manifests/3.49.1
Already downloaded: /home/builder/.cache/Homebrew/downloads/ce3cf24bf33f0eff2d169e046ba5da3ec75ab9fe0439e7b7face44f42e033fcb--sqlite-3.49.1.bottle_manifest.json
==> Pouring sqlite--3.49.1.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/sqlite/3.49.1: 13 files, 6MB
==> Installing ttyd dependency: libffi
==> Downloading https://ghcr.io/v2/homebrew/core/libffi/manifests/3.4.8
Already downloaded: /home/builder/.cache/Homebrew/downloads/8898311b301bbcb1a886c89fba2b17479f52778f5a10d4bee0eb0c9ac5805950--libffi-3.4.8.bottle_manifest.json
==> Pouring libffi--3.4.8.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/libffi/3.4.8: 19 files, 791.6KB
==> Installing ttyd dependency: ruby
==> Downloading https://ghcr.io/v2/homebrew/core/ruby/manifests/3.4.3
Already downloaded: /home/builder/.cache/Homebrew/downloads/c166b5a6278b7761675bf181fde3278f49fc3580d939c6c8dcd25a29936e04c7--ruby-3.4.3.bottle_manifest.json
==> Installing dependencies for ruby: gperf
==> Installing ruby dependency: gperf
==> Downloading https://ghcr.io/v2/homebrew/core/gperf/manifests/3.3
Already downloaded: /home/builder/.cache/Homebrew/downloads/6807042de11f05893fa38ad0a2975b4157931d9919ed78ee5b4cb0054d780dd2--gperf-3.3.bottle_manifest.json
==> Pouring gperf--3.3.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/gperf/3.3: 12 files, 617KB
==> Installing ruby
==> Pouring ruby--3.4.3.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/ruby/3.4.3: 20,191 files, 64.3MB
==> Installing ttyd dependency: gdbm
==> Downloading https://ghcr.io/v2/homebrew/core/gdbm/manifests/1.25
Already downloaded: /home/builder/.cache/Homebrew/downloads/f1c1f4352b188ebc1592502d286d9908ea4442531a049d3be8d09db70ddec107--gdbm-1.25.bottle_manifest.json
==> Pouring gdbm--1.25.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/gdbm/1.25: 43 files, 1.5MB
==> Installing ttyd dependency: perl
==> Downloading https://ghcr.io/v2/homebrew/core/perl/manifests/5.40.2
Already downloaded: /home/builder/.cache/Homebrew/downloads/a520d519d4450ead392eb1a07673c5147af1d7fbc5977a0acf622bddeb1ecbd5--perl-5.40.2.bottle_manifest.json
==> Installing dependencies for perl: expat
==> Installing perl dependency: expat
==> Downloading https://ghcr.io/v2/homebrew/core/expat/manifests/2.7.1
Already downloaded: /home/builder/.cache/Homebrew/downloads/09efb27f4cd66decc2e0f393e7f9292c729064e5c939cd8191f81fc000c3947a--expat-2.7.1.bottle_manifest.json
==> Pouring expat--2.7.1.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/expat/2.7.1: 23 files, 921KB
==> Installing perl
==> Pouring perl--5.40.2.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/perl/5.40.2: 2,788 files, 77MB
==> Installing ttyd dependency: vim
==> Downloading https://ghcr.io/v2/homebrew/core/vim/manifests/9.1.1350
Already downloaded: /home/builder/.cache/Homebrew/downloads/d2c8b2bd33a57369c92f16b936de631b2e82786f9bf77ade7d845e84b6bb802e--vim-9.1.1350.bottle_manifest.json
==> Installing dependencies for vim: xz and python@3.13
==> Installing vim dependency: xz
==> Downloading https://ghcr.io/v2/homebrew/core/xz/manifests/5.8.1
Already downloaded: /home/builder/.cache/Homebrew/downloads/86a115cc1d43ff8a480fd907f812e70a403e1675d8a7223f61bbb08cbd2adc27--xz-5.8.1.bottle_manifest.json
==> Pouring xz--5.8.1.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/xz/5.8.1: 97 files, 2.6MB
==> Installing vim dependency: python@3.13
==> Downloading https://ghcr.io/v2/homebrew/core/python/3.13/manifests/3.13.3-1
Already downloaded: /home/builder/.cache/Homebrew/downloads/c1320fdecb7ec29ab4a10c506bbe39179751a95489af3414b3a4acce32721cc0--python@3.13-3.13.3-1.bottle_manifest.json
==> Pouring python@3.13--3.13.3.x86_64_linux.bottle.1.tar.gz
Warning: These files were overwritten during the `brew link` step:
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/__main__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/__pip-runner__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/build_env.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cache.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cli/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cli/autocompletion.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cli/base_command.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cli/cmdoptions.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cli/command_context.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cli/index_command.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cli/main.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cli/main_parser.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cli/parser.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cli/progress_bars.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cli/req_command.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cli/spinners.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/cli/status_codes.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/cache.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/check.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/completion.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/configuration.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/debug.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/download.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/freeze.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/hash.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/help.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/index.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/inspect.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/install.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/list.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/search.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/show.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/uninstall.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/commands/wheel.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/configuration.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/distributions/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/distributions/base.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/distributions/installed.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/distributions/sdist.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/distributions/wheel.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/exceptions.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/index/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/index/collector.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/index/package_finder.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/index/sources.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/locations/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/locations/_distutils.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/locations/_sysconfig.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/locations/base.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/main.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/metadata/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/metadata/_json.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/metadata/base.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/metadata/importlib/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/metadata/importlib/_compat.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/metadata/importlib/_dists.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/metadata/importlib/_envs.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/metadata/pkg_resources.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/models/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/models/candidate.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/models/direct_url.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/models/format_control.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/models/index.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/models/installation_report.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/models/link.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/models/scheme.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/models/search_scope.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/models/selection_prefs.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/models/target_python.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/models/wheel.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/network/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/network/auth.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/network/cache.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/network/download.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/network/lazy_wheel.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/network/session.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/network/utils.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/network/xmlrpc.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/build/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/build/build_tracker.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/build/metadata.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/build/metadata_editable.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/build/metadata_legacy.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/build/wheel.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/build/wheel_editable.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/build/wheel_legacy.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/check.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/freeze.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/install/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/install/editable_legacy.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/install/wheel.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/operations/prepare.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/pyproject.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/req/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/req/constructors.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/req/req_file.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/req/req_install.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/req/req_set.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/req/req_uninstall.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/resolution/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/resolution/base.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/resolution/legacy/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/resolution/legacy/resolver.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/base.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/candidates.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/factory.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/provider.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/reporter.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/requirements.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/resolver.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/self_outdated_check.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/_jaraco_text.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/_log.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/appdirs.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/compat.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/compatibility_tags.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/datetime.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/deprecation.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/direct_url_helpers.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/egg_link.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/entrypoints.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/filesystem.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/filetypes.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/glibc.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/hashes.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/logging.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/misc.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/packaging.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/retry.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/setuptools_build.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/subprocess.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/temp_dir.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/unpacking.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/urls.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/virtualenv.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/utils/wheel.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/vcs/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/vcs/bazaar.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/vcs/git.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/vcs/mercurial.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/vcs/subversion.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/vcs/versioncontrol.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_internal/wheel_builder.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/cachecontrol/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/cachecontrol/_cmd.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/cachecontrol/adapter.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/cachecontrol/cache.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/cachecontrol/caches/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/cachecontrol/controller.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/cachecontrol/filewrapper.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/cachecontrol/heuristics.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/cachecontrol/py.typed
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/cachecontrol/serialize.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/cachecontrol/wrapper.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/certifi/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/certifi/__main__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/certifi/cacert.pem
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/certifi/core.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/certifi/py.typed
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/compat.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/database.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/index.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/locators.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/manifest.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/markers.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/metadata.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/resources.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/scripts.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/t32.exe
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/t64-arm.exe
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/t64.exe
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/util.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/version.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/w32.exe
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/w64-arm.exe
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/w64.exe
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distlib/wheel.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distro/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distro/__main__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distro/distro.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/distro/py.typed
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/idna/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/idna/codec.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/idna/compat.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/idna/core.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/idna/idnadata.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/idna/intranges.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/idna/package_data.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/idna/py.typed
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/idna/uts46data.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/msgpack/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/msgpack/exceptions.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/msgpack/ext.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/msgpack/fallback.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/_elffile.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/_manylinux.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/_musllinux.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/_parser.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/_structures.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/_tokenizer.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/licenses/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/licenses/_spdx.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/markers.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/metadata.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/py.typed
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/requirements.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/specifiers.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/tags.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/utils.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/packaging/version.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pkg_resources/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/platformdirs/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/platformdirs/__main__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/platformdirs/android.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/platformdirs/api.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/platformdirs/macos.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/platformdirs/py.typed
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/platformdirs/unix.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/platformdirs/version.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/platformdirs/windows.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/__main__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/cmdline.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/console.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/filter.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/filters/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatter.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/_mapping.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/bbcode.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/groff.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/html.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/img.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/irc.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/latex.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/other.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/rtf.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/svg.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/terminal.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/terminal256.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/lexer.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/lexers/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/lexers/_mapping.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/lexers/python.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/modeline.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/plugin.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/regexopt.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/scanner.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/sphinxext.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/style.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/styles/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/styles/_mapping.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/token.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/unistring.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pygments/util.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_impl.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/py.typed
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/__version__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/_internal_utils.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/adapters.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/api.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/auth.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/certs.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/compat.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/cookies.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/exceptions.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/help.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/hooks.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/models.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/packages.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/sessions.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/status_codes.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/structures.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/requests/utils.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/resolvelib/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/resolvelib/compat/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/resolvelib/providers.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/resolvelib/py.typed
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/resolvelib/reporters.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/resolvelib/resolvers.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/resolvelib/structs.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/__main__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_cell_widths.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_emoji_codes.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_emoji_replace.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_export_format.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_extension.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_fileno.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_inspect.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_log_render.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_loop.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_null_file.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_palettes.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_pick.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_ratio.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_spinners.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_stack.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_timer.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_win32_console.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_windows.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_windows_renderer.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/_wrap.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/abc.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/align.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/ansi.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/bar.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/box.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/cells.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/color.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/color_triplet.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/columns.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/console.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/constrain.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/containers.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/control.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/default_styles.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/diagnose.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/emoji.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/errors.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/file_proxy.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/filesize.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/highlighter.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/json.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/jupyter.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/layout.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/live.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/live_render.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/logging.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/markup.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/measure.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/padding.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/pager.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/palette.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/panel.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/pretty.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/progress.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/progress_bar.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/prompt.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/protocol.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/py.typed
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/region.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/repr.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/rule.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/scope.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/screen.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/segment.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/spinner.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/status.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/style.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/styled.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/syntax.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/table.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/terminal_theme.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/text.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/theme.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/themes.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/traceback.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/rich/tree.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/tomli/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/tomli/_parser.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/tomli/_re.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/tomli/_types.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/tomli/py.typed
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/truststore/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/truststore/_api.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/truststore/_macos.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/truststore/_openssl.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/truststore/_ssl_constants.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/truststore/_windows.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/truststore/py.typed
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/typing_extensions.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/_collections.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/_version.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/connection.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/connectionpool.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/appengine.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/securetransport.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/socks.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/exceptions.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/fields.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/filepost.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/six.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/poolmanager.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/request.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/response.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/util/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/util/connection.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/util/proxy.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/util/queue.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/util/request.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/util/response.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/util/retry.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/util/ssl_.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/util/ssltransport.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/util/timeout.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/util/url.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/urllib3/util/wait.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/_vendor/vendor.txt
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/pip/py.typed
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/__main__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/_bdist_wheel.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/_setuptools_logging.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/bdist_wheel.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/cli/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/cli/convert.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/cli/pack.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/cli/tags.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/cli/unpack.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/macosx_libfile.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/metadata.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/util.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/LICENSE
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/LICENSE.APACHE
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/LICENSE.BSD
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/__init__.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/_elffile.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/_manylinux.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/_musllinux.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/_parser.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/_structures.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/_tokenizer.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/markers.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/requirements.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/specifiers.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/tags.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/utils.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/packaging/version.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/vendored/vendor.txt
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel/wheelfile.py
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel-0.45.1.dist-info/INSTALLER
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel-0.45.1.dist-info/METADATA
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel-0.45.1.dist-info/REQUESTED
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel-0.45.1.dist-info/WHEEL
/home/linuxbrew/.linuxbrew/lib/python3.13/site-packages/wheel-0.45.1.dist-info/entry_points.txt

They have been backed up to: /home/builder/.cache/Homebrew/Backup
==> Summary
🍺  /home/linuxbrew/.linuxbrew/Cellar/python@3.13/3.13.3: 3,157 files, 71.5MB
==> Installing vim
==> Pouring vim--9.1.1350.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/vim/9.1.1350: 2,484 files, 50.2MB
==> Installing ttyd
==> Pouring ttyd--1.7.7_2.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/ttyd/1.7.7_2: 7 files, 725.1KB
==> Running `brew cleanup ttyd`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
Error: Too many open files @ rb_sysopen - /etc/ld.so.conf

I can now fire up a bash shell in a browser

$ ttyd -p 1234 /bin/bash
[2025/05/05 19:28:30:2617] N: ttyd 1.7.7-unknown (libwebsockets 4.3.5-unknown)
[2025/05/05 19:28:30:2618] N: tty configuration:
[2025/05/05 19:28:30:2618] N:   start command: /bin/bash
[2025/05/05 19:28:30:2618] N:   close signal: SIGHUP (1)
[2025/05/05 19:28:30:2618] N:   terminal type: xterm-256color
[2025/05/05 19:28:30:2618] N: The --writable option is not set, will start in readonly mode
[2025/05/05 19:28:30:2647] N:    /home/linuxbrew/.linuxbrew/Cellar/libwebsockets/4.3.5/lib/libwebsockets-evlib_uv.so
[2025/05/05 19:28:30:2647] N: lws_create_context: LWS: 4.3.5-unknown, NET CLI SRV H1 H2 WS ConMon IPV6-off
[2025/05/05 19:28:30:2653] N: elops_init_pt_uv:  Using foreign event loop...
[2025/05/05 19:28:30:2661] N: __lws_lc_tag:  ++ [wsi|0|pipe] (1)
[2025/05/05 19:28:30:2661] N: __lws_lc_tag:  ++ [vh|0|netlink] (1)
[2025/05/05 19:28:30:2682] N: __lws_lc_tag:  ++ [vh|1|default||1234] (2)
[2025/05/05 19:28:30:2683] N: [vh|1|default||1234]: lws_socket_bind: source ads 0.0.0.0
[2025/05/05 19:28:30:2683] N: __lws_lc_tag:  ++ [wsi|1|listen|default||1234] (2)
[2025/05/05 19:28:30:2683] N:  Listening on port: 1234
[2025/05/05 19:28:39:8901] N: __lws_lc_tag:  ++ [wsisrv|0|adopted] (1)
[2025/05/05 19:28:39:8969] N: __lws_lc_tag:  ++ [wsisrv|1|adopted] (2)
[2025/05/05 19:28:39:8974] N: HTTP / - 127.0.0.1
[2025/05/05 19:28:40:0970] N: HTTP /token - 127.0.0.1
[2025/05/05 19:28:40:1339] N: __lws_lc_tag:  ++ [wsisrv|2|adopted] (3)
[2025/05/05 19:28:40:4372] N: __lws_lc_tag:  ++ [wsisrv|3|adopted] (4)
[2025/05/05 19:28:40:4374] N: WS   /ws - 127.0.0.1, clients: 1
[2025/05/05 19:28:40:4481] N: started process, pid: 332023

I can now see a shell, albeit it wont take input

/content/images/2025/05/ttyd-01.png

I realized i just needed to add -W to make it writable

$ ttyd -p 1234 -W /bin/bash
[2025/05/05 19:34:13:2628] N: ttyd 1.7.7-unknown (libwebsockets 4.3.5-unknown)
[2025/05/05 19:34:13:2631] N: tty configuration:
[2025/05/05 19:34:13:2631] N:   start command: /bin/bash
[2025/05/05 19:34:13:2631] N:   close signal: SIGHUP (1)
[2025/05/05 19:34:13:2631] N:   terminal type: xterm-256color
[2025/05/05 19:34:13:2705] N:    /home/linuxbrew/.linuxbrew/Cellar/libwebsockets/4.3.5/lib/libwebsockets-evlib_uv.so
[2025/05/05 19:34:13:2707] N: lws_create_context: LWS: 4.3.5-unknown, NET CLI SRV H1 H2 WS ConMon IPV6-off
[2025/05/05 19:34:13:2709] N: elops_init_pt_uv:  Using foreign event loop...
[2025/05/05 19:34:13:2712] N: __lws_lc_tag:  ++ [wsi|0|pipe] (1)
[2025/05/05 19:34:13:2714] N: __lws_lc_tag:  ++ [vh|0|netlink] (1)

/content/images/2025/05/ttyd-02.png

This could be pretty useful with something like btop

I can install that

$ brew install btop

I can now serve that up

$ ttyd -p 1234 -W /home/linuxbrew/.linuxbrew/bin/btop
[2025/05/05 19:37:21:0690] N: ttyd 1.7.7-unknown (libwebsockets 4.3.5-unknown)
[2025/05/05 19:37:21:0691] N: tty configuration:
[2025/05/05 19:37:21:0691] N:   start command: /home/linuxbrew/.linuxbrew/bin/btop
[2025/05/05 19:37:21:0691] N:   close signal: SIGHUP (1)
[2025/05/05 19:37:21:0691] N:   terminal type: xterm-256color
[2025/05/05 19:37:21:0697] N:    /home/linuxbrew/.linuxbrew/Cellar/libwebsockets/4.3.5/lib/libwebsockets-evlib_uv.so
[2025/05/05 19:37:21:0697] N: lws_create_context: LWS: 4.3.5-unknown, NET CLI SRV H1 H2 WS ConMon IPV6-off
[2025/05/05 19:37:21:0698] N: elops_init_pt_uv:  Using foreign event loop...
[2025/05/05 19:37:21:0698] N: __lws_lc_tag:  ++ [wsi|0|pipe] (1)
[2025/05/05 19:37:21:0703] N: __lws_lc_tag:  ++ [vh|0|netlink] (1)
[2025/05/05 19:37:21:0704] N: __lws_lc_tag:  ++ [vh|1|default||1234] (2)
[2025/05/05 19:37:21:0705] N: [vh|1|default||1234]: lws_socket_bind: source ads 0.0.0.0
[2025/05/05 19:37:21:0705] N: __lws_lc_tag:  ++ [wsi|1|listen|default||1234] (2)
[2025/05/05 19:37:21:0705] N:  Listening on port: 1234

And view the data remotely

/content/images/2025/05/ttyd-03.png

Exposing

This could be even extended to ingress from outside.

To do so, I’ll make an A record

$ az account set --subscription "Pay-As-You-Go" && az network dns record-set a add-record -g idjdnsrg -z tpk.pw -a 75.73.224.240 -n btop100
{
  "ARecords": [
    {
      "ipv4Address": "75.73.224.240"
    }
  ],
  "TTL": 3600,
  "etag": "7dba35d6-3c2f-41f9-8d96-60959a778da1",
  "fqdn": "btop100.tpk.pw.",
  "id": "/subscriptions/d955c0ba-13dc-44cf-a29a-8fed74cbb22d/resourceGroups/idjdnsrg/providers/Microsoft.Network/dnszones/tpk.pw/A/btop100",
  "name": "btop100",
  "provisioningState": "Succeeded",
  "resourceGroup": "idjdnsrg",
  "targetResource": {},
  "trafficManagementProfile": {},
  "type": "Microsoft.Network/dnszones/A"
}

I then went to my Dockerhost and installed Homebrew

builder@builder-T100:~$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
==> Checking for `sudo` access (which may request your password)...
==> This script will install:
/home/linuxbrew/.linuxbrew/bin/brew
/home/linuxbrew/.linuxbrew/share/doc/homebrew
/home/linuxbrew/.linuxbrew/share/man/man1/brew.1
/home/linuxbrew/.linuxbrew/share/zsh/site-functions/_brew
/home/linuxbrew/.linuxbrew/etc/bash_completion.d/brew
/home/linuxbrew/.linuxbrew/Homebrew
...

Then brew install ttyd

builder@builder-T100:~$ brew install ttyd
==> Downloading https://ghcr.io/v2/homebrew/core/ttyd/manifests/1.7.7_2
################################################################################################################################################################################## 100.0%
==> Fetching dependencies for ttyd: json-c, ca-certificates, openssl@3, libevent, libuv, libwebsockets, libunistring, acl, icu4c@77, ncurses, readline, libxml2, gettext, libsodium, lua, mpdecimal, sqlite, xz, berkeley-db@5, bzip2, expat, libedit, libffi, unzip, python@3.13, libyaml, gperf, libxcrypt, ruby, gdbm, perl and vim
==> Downloading https://ghcr.io/v2/homebrew/core/json-c/manifests/0.18
################################################################################################################################################################################## 100.0%
==> Fetching json-c
==> Downloading https://ghcr.io/v2/homebrew/core/json-c/blobs/sha256:6afd63b22756b317e0dd21aa71644f47ec11996366bc60c8d5c9306f87044caa
################################################################################################################################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/ca-certificates/manifests/2025-02-25
##########################################
... snip...

Lastly, if not installed, add btop to this host as well

builder@builder-T100:~$ brew install btop
==> Downloading https://ghcr.io/v2/homebrew/core/btop/manifests/1.4.2
################################################################################################################################################################################## 100.0%
==> Fetching btop
==> Downloading https://ghcr.io/v2/homebrew/core/btop/blobs/sha256:512af0dc52a737d26afe93a056f5eb3dad2b17e1be4e014178c218c15577c70e
################################################################################################################################################################################## 100.0%
==> Pouring btop--1.4.2.x86_64_linux.bottle.tar.gz
🍺  /home/linuxbrew/.linuxbrew/Cellar/btop/1.4.2: 47 files, 1.9MB
==> Running `brew cleanup btop`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

I can now fire up a read-only viewer for btop

builder@builder-T100:~$ [2025/05/06 18:45:14:1540] N: ttyd 1.7.7-unknown (libwebsockets 4.3.5-unknown)
[2025/05/06 18:45:14:1542] N: tty configuration:
[2025/05/06 18:45:14:1542] N:   start command: /home/linuxbrew/.linuxbrew/bin/btop
[2025/05/06 18:45:14:1542] N:   close signal: SIGHUP (1)
[2025/05/06 18:45:14:1542] N:   terminal type: xterm-256color
[2025/05/06 18:45:14:1542] N: The --writable option is not set, will start in readonly mode
[2025/05/06 18:45:14:1576] N:    /home/linuxbrew/.linuxbrew/Cellar/libwebsockets/4.3.5/lib/libwebsockets-evlib_uv.so
[2025/05/06 18:45:14:1577] N: lws_create_context: LWS: 4.3.5-unknown, NET CLI SRV H1 H2 WS ConMon IPV6-off
[2025/05/06 18:45:14:1578] N: elops_init_pt_uv:  Using foreign event loop...
[2025/05/06 18:45:14:1586] N: __lws_lc_tag:  ++ [wsi|0|pipe] (1)
[2025/05/06 18:45:14:1587] N: __lws_lc_tag:  ++ [vh|0|netlink] (1)
[2025/05/06 18:45:14:1589] N: __lws_lc_tag:  ++ [vh|1|default||7555] (2)
[2025/05/06 18:45:14:1589] N: [vh|1|default||7555]: lws_socket_bind: source ads 0.0.0.0
[2025/05/06 18:45:14:1589] N: __lws_lc_tag:  ++ [wsi|1|listen|default||7555] (2)
[2025/05/06 18:45:14:1590] N:  Listening on port: 7555
[2025/05/06 18:45:14:1594] W: _lws_smd_msg_send: rejecting message on queue depth 40
[2025/05/06 18:45:14:1594] W: _lws_smd_msg_send: rejecting message on queue depth 40

We can see it in the network just fine at http://192.168.1.100:7555

/content/images/2025/05/ttyd-04.png

I can now create an Ingress route with TLS that forwards traffic off to the 192.168.1.100 host on port 7555

$ cat ./btop100.yaml
apiVersion: v1
kind: Endpoints
metadata:
  name: btop100-external-ip
subsets:
- addresses:
  - ip: 192.168.1.100
  ports:
  - name: btop100int
    port: 7555
    protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: btop100-external-ip
spec:
  clusterIP: None
  clusterIPs:
  - None
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  - IPv6
  ipFamilyPolicy: RequireDualStack
  ports:
  - name: btop100
    port: 80
    protocol: TCP
    targetPort: 7555
  sessionAffinity: None
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: azuredns-tpkpw
    ingress.kubernetes.io/ssl-redirect: "true"
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.org/websocket-services: btop100-external-ip
  generation: 1
  name: btop100ingress
spec:
  rules:
  - host: btop100.tpk.pw
    http:
      paths:
      - backend:
          service:
            name: btop100-external-ip
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - btop100.tpk.pw
    secretName: btop100-tls

$ kubectl apply -f ./btop100.yaml
endpoints/btop100-external-ip created
service/btop100-external-ip created
ingress.networking.k8s.io/btop100ingress created

As soon as the cert is live

$ kubectl get cert btop100-tls
NAME          READY   SECRET        AGE
btop100-tls   True    btop100-tls   85s

I can now view it at https://btop100.tpk.pw/ in real time

/content/images/2025/05/ttyd-05.png

Because this is public with no auth, I did not add “-W” (that would allow write) in case there is some hidden btop menu item of which I’m not aware that would let people kill processes or run arbitrary code.

Dumbwhois

A while back I bookmarked this MariusHosting article on Dumbwhois. It shows how to fire up Dumbwhois in Portainer.

That Github page shows the Docker Compose YAML

services:
   dumbwhois:
      image: dumbwareio/dumbwhois:latest
      container_name: dumbwhois
      restart: unless-stopped
      ports:
      - ${DUMBWHOIS_PORT:-3000}:3000
      environment:
      - SITE_TITLE=${DUMBWHOIS_SITE_TITLE:-DumbWhois}
      # (Optional) Restrict origins - ex: https://subdomain.domain.tld,https://auth.proxy.tld,http://internalip:port' (empty/default is '*')
      # - ALLOWED_ORIGINS=${DUMBWHOIS_ALLOWED_ORIGINS:-*}

Though for a quick test, we could just use docker

$ docker run -p 3000:3000 -d dumbwhois

I’ll run their image and use port 3444

$ docker run -p 3444:3000 -d dumbwareio/dumbwhois:latest
Unable to find image 'dumbwareio/dumbwhois:latest' locally
latest: Pulling from dumbwareio/dumbwhois
f18232174bc9: Already exists
a5cf150cb374: Pull complete
f46e519824fb: Pull complete
3d8c59f7308d: Pull complete
a24ecc5c4bbe: Pull complete
a23f1f7af18d: Pull complete
Digest: sha256:147af3ebb13471b23468da9f2496b881374b00785da13abce365d23f74059087
Status: Downloaded newer image for dumbwareio/dumbwhois:latest
3fae6cd2dc5ea1dea93fceea39d384c1f7983f42ffc1f2f35ed597975a90e313

I can now fire up a WHOIS on this domain

/content/images/2025/05/n8n-29.png

It doesn’t show much

/content/images/2025/05/n8n-30.png

But if we click one of those IPv4 addresses we can then tell it’s hosted via Amazon

/content/images/2025/05/n8n-31.png

I was a bit freaked out that my own external IP did show my city and Lat and Long

/content/images/2025/05/n8n-32.png

But luckily that seems to just find the center of my town (but it’s not too far off so i had to keep the map zoomed)

/content/images/2025/05/n8n-33.png

There is a Print mode and Dark mode

/content/images/2025/05/n8n-34.png

But I think I’ll avoid hosting and exposing this particular app from my cluster

n8n

There are a few ways to run, but the one that I thought might be easiest was to just use Docker

We can see their local Docker steps in this readme

docker volume create n8n_data
docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

However, I’m going to simplify it a bit and run with a local folder (in case I want to do backups)

builder@builder-T100:~$ mkdir n8n
builder@builder-T100:~$ cd n8n
builder@builder-T100:~/n8n$ docker run -d --name n8n -p 5678:5678 -v /home/builder/n8n:/home/node/.n8n docker.n8n.io/n8nio/n8n
Unable to find image 'docker.n8n.io/n8nio/n8n:latest' locally
latest: Pulling from n8nio/n8n
f18232174bc9: Pull complete
8cc209e5911c: Pull complete
d7a069a788e0: Pull complete
42ec265e2954: Pull complete
c8212b925ea8: Pull complete
4f4fb700ef54: Pull complete
30e4c71bc727: Pull complete
271df4b6eefa: Pull complete
ff177bbec4fd: Pull complete
8e4df22b281d: Pull complete
4b4146378ef7: Pull complete
Digest: sha256:0fbb053b22d1ef930a3c65e7b89e84d53a89ca7bfccd39d464ec355341faecf8
Status: Downloaded newer image for docker.n8n.io/n8nio/n8n:latest
3349858304fd96d8e351f006c72cbe8b8bd9363f28fea530f4e585cd4173189b

I immediately saw an SSL nag-a-gram

/content/images/2025/05/n8n-01.png

I’ll scrub what I just did

builder@builder-T100:~/n8n$ docker stop n8n
n8n
builder@builder-T100:~/n8n$ cd ..
builder@builder-T100:~$ rm -rf ./n8n
builder@builder-T100:~$ docker rm n8n
n8n

Now let’s add that environment variable (-e N8N_SECURE_COOKIE=false)

builder@builder-T100:~/n8n$ docker run -d --name n8n -p 5678:5678 -e N8N_SECURE_COOKIE=false -v /home/builder/n8n:/home/node/.n8n docker.n8n.io/n8nio/n8n
49ffc5558ab1b9f36c6c358a287ef44357df524154e9cb34bf5d00baef850227

This time it worked

/content/images/2025/05/n8n-02.png

After creating the user, I have to do a survey

/content/images/2025/05/n8n-03.png

And if you are game to get marketing emails, they’ll open up some extra features

/content/images/2025/05/n8n-04.png

Which I can enter on the Usage and Plan page

/content/images/2025/05/n8n-05.png

Which seems to just make that banner disappear - I’m just now on a “Registered” Community Edition

/content/images/2025/05/n8n-06.png

Creating a workflow

Let’s start from a scratch template

/content/images/2025/05/n8n-07.png

I’ll start with a manual trigger

/content/images/2025/05/n8n-08.png

I’ll have it trigger an HTTP request

/content/images/2025/05/n8n-09.png

I’m going to use webhook.site to test

/content/images/2025/05/n8n-10.png

I can also set some optional data like “Execute Once” or “Retry” or SSL certs

/content/images/2025/05/n8n-11.png

So now that I have a basic workflow, let’s give it a test

I can go to Executions to see the results of past runs

/content/images/2025/05/n8n-13.png

Before moving on, let’s create an SSL ingress as we did with ttyd and btop

$ az account set --subscription "Pay-As-You-Go" && az network dns record-set a add-record -g idjdnsrg -z tpk.pw -a 75.73.224.240 -n n8n
{
  "ARecords": [
    {
      "ipv4Address": "75.73.224.240"
    }
  ],
  "TTL": 3600,
  "etag": "5decd246-908f-4a8b-b28d-3ff124f5ab0c",
  "fqdn": "n8n.tpk.pw.",
  "id": "/subscriptions/d955c0ba-13dc-44cf-a29a-8fed74cbb22d/resourceGroups/idjdnsrg/providers/Microsoft.Network/dnszones/tpk.pw/A/n8n",
  "name": "n8n",
  "provisioningState": "Succeeded",
  "resourceGroup": "idjdnsrg",
  "targetResource": {},
  "trafficManagementProfile": {},
  "type": "Microsoft.Network/dnszones/A"
}

Now let’s execute the Kubernetes service, external endpoint and ingress

$ cat ./n8n.yaml
apiVersion: v1
kind: Endpoints
metadata:
  name: n8n-external-ip
subsets:
- addresses:
  - ip: 192.168.1.100
  ports:
  - name: n8nint
    port: 5678
    protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: n8n-external-ip
spec:
  clusterIP: None
  clusterIPs:
  - None
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  - IPv6
  ipFamilyPolicy: RequireDualStack
  ports:
  - name: n8n
    port: 80
    protocol: TCP
    targetPort: 5678
  sessionAffinity: None
  type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: azuredns-tpkpw
    ingress.kubernetes.io/ssl-redirect: "true"
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.org/websocket-services: n8n-external-ip
  generation: 1
  name: n8ningress
spec:
  rules:
  - host: n8n.tpk.pw
    http:
      paths:
      - backend:
          service:
            name: n8n-external-ip
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - n8n.tpk.pw
    secretName: n8n-tls
builder@DESKTOP-QADGF36:~/Workspaces/jekyll-blog$ kubectl apply -f n8n.yaml
endpoints/n8n-external-ip created
service/n8n-external-ip created
ingress.networking.k8s.io/n8ningress created

Once the cert was ready, I could login and view workflows

/content/images/2025/05/n8n-14.png

Webhook driven

Let’s build out a workflow with a webhook next

/content/images/2025/05/n8n-15.png

The first thing I noticed is that it doesn’t know the external URL

/content/images/2025/05/n8n-16.png

I’m going to proceed, but I’m not sure if pass-through will work.

As we saw above, it clearly works with a basic GET call

$response = Invoke-WebRequest -Uri "https://n8n.tpk.pw/webhook-test/2bdddc3c-ec9f-43f7-abe5-05be8b7caf81"
$response = Invoke-WebRequest -Uri "http://192.168.1.100:5678/webhook-test/2bdddc3c-ec9f-43f7-abe5-05be8b7caf81"

Note: we were using the “Test” URL, there is a production URL on the other side of the slider

/content/images/2025/05/n8n-18.png

There are also some options to lock it down

/content/images/2025/05/n8n-19.png

As well as auth

/content/images/2025/05/n8n-20.png

In this flow, I’m going to have it create a Github Issue and use the body of the invokation as the body of the issue

/content/images/2025/05/n8n-21.png

I’ll need to give it a credential

/content/images/2025/05/n8n-22.png

Which it validates when we save

/content/images/2025/05/n8n-23.png

N8n alerts me after I go back to the Canvas that I missed some steps

/content/images/2025/05/n8n-24.png

And as I fill out details, I noted it does properly search and find Private GH repos

/content/images/2025/05/n8n-25.png

I’ll now curl with a body

$ curl -X GET   -H "Content-Type: text/plain"   -d "My Body"   http://192.168.1.100:5678/webhook-test/2bdddc3c-ec9f-43f7-abe5-05be8b7caf81
{"code":404,"message":"The requested webhook \"2bdddc3c-ec9f-43f7-abe5-05be8b7caf81\" is not registered.","hint":"Click the 'Test workflow' button on the canvas, then try again. (In test mode, the webhook only works for one call after you click this button)"}

I clicked “Test Workflow” as it asked and this time it took the GET

$ curl -X GET   -H "Content-Type: text/plain"   -d "My Body"   http://192.168.1.100:5678/webhook-test/2bdddc3c-ec9f-43f7-abe5-05be8b7caf81
{"message":"Workflow was started"}

And it looked like it ran

/content/images/2025/05/n8n-26.png

And the evidence it worked is there in Github

/content/images/2025/05/n8n-27.png

Even after I leave the workflows, unless I toggle the slider, they are “Inactive”

/content/images/2025/05/n8n-28.png

Here you can see the enabled full flow with the non-test URL

Clearly, N8n deserves a follow up article as there is much much more to this tool. However, this serves a general overview for how to get it running quickly locally.

Summary

Today we looked into three self-hosted Open-Source tools: TTYD, Dumbwhois and n8n.

TTYD made it easy to serve an interactive bash shell on a URL. We moved on to showing how to use our k3s cluster to expose a proper SSL URL to make a btop dashboard ( btop100.tpk.pw ).

Dumbwhois was a very basic but functional whois. I’m not sure the exact usage as whois sites are all over, but if one needed a self-hosted option, this would work.

Lastly, we had n8n which I kept simple and served with Docker. There is a more HA option that can use a PostgreSQL backend as well as a SaaS option that starts at US$20/mo. Considering the power, I would very much look to buy this for work.

I really thought n8n was going to be a diagram tool and was surprised how many connectors it had out-of-the-box. I will be doing a follow-up article on this soon to test deeper integrations, HA setup with PSQL and some of the AI features.

TTYD Dumbwhois n8n Opensource Containers Kubernetes

Have something to add? Feedback? You can use the feedback form

Isaac Johnson

Isaac Johnson

Cloud Solutions Architect

Isaac is a CSA and DevOps engineer who focuses on cloud migrations and devops processes. He also is a dad to three wonderful daughters (hence the references to Princess King sprinkled throughout the blog).

Theme built by C.S. Rhymes