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
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)
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
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
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
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
It doesn’t show much
But if we click one of those IPv4 addresses we can then tell it’s hosted via Amazon
I was a bit freaked out that my own external IP did show my city and Lat and Long
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)
There is a Print mode and Dark mode
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
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
After creating the user, I have to do a survey
And if you are game to get marketing emails, they’ll open up some extra features
Which I can enter on the Usage and Plan page
Which seems to just make that banner disappear - I’m just now on a “Registered” Community Edition
Creating a workflow
Let’s start from a scratch template
I’ll start with a manual trigger
I’ll have it trigger an HTTP request
I’m going to use webhook.site to test
I can also set some optional data like “Execute Once” or “Retry” or SSL certs
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
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
Webhook driven
Let’s build out a workflow with a webhook next
The first thing I noticed is that it doesn’t know the external URL
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
There are also some options to lock it down
As well as auth
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
I’ll need to give it a credential
Which it validates when we save
N8n alerts me after I go back to the Canvas that I missed some steps
And as I fill out details, I noted it does properly search and find Private GH repos
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
And the evidence it worked is there in Github
Even after I leave the workflows, unless I toggle the slider, they are “Inactive”
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.