Commit Graph
2293 Commits
Author SHA1 Message Date
raucao e53df92b57 kosmos-hubot: scope the nginx upstream to the production environment
search(:node, 'role:hubot') also matched retired nodes outside production
(e.g. nodejs-4 in _default), so the vhosts could proxy to a dead host and
return 502. Restrict the search to chef_environment:production and pick
deterministically.
2026-10-28 18:22:23 +04:00
raucao 086b31a387 kosmos-hubot: declare bot firewall rules at the recipe top level
The per-bot firewall_rule declared inside the kosmos_hubot_bot custom
resource was not collected by the ufw provider when it rebuilt the rules
file, so the bots' HTTP ports were never opened. Declare the rules in the
default recipe instead, matching the pattern used by the other cookbooks,
and drop the now-unused firewall property from the resource.
2026-10-28 18:22:23 +04:00
raucao d3062d701f hubot: drop the unused hubot-auth script
hubot-auth is CoffeeScript-only (needs porting) and nothing in the bots calls
robot.auth; remove it from hal8000's external scripts and drop HUBOT_AUTH_ADMIN
from both bots.
2026-10-28 18:22:22 +04:00
raucao cc9b324a18 Refactor kosmos-hubot to a data-driven model
Replace the per-bot and per-vhost recipes with a single data-driven setup.

- resources/bot.rb (kosmos_hubot_bot): git checkout, npm install, generated
  external-scripts.json, extra files, and one hardened systemd unit for every
  hubot (Type=simple, Restart=always, RestartSec=2, TimeoutSec=10, PrivateTmp,
  ProtectSystem=full, NoNewPrivileges, PrivateDevices)
- recipes/default.rb: shared setup + loop over node['kosmos-hubot']['bots'];
  recipes/nginx.rb: loop over node['kosmos-hubot']['vhosts'];
  recipes/hal8000_extras.rb: augments the hal8000 bot (searched IPFS/RSK hosts,
  kredits .env, wallet) and declares no resources itself
- bot config and vhosts now live in attributes; secrets come from the encrypted
  credentials/hubot bag via secret_env
- Node 22.23.4; kosmos_redis replaces redisio; REDIS_URL uses ?<prefix>; the
  adapter is passed as -a <module>; botka gains hubot-incoming-webhook
- roles/hubot, nginx_proxy, openresty_proxy and the chef-nodes pointer updated
2026-10-28 18:22:22 +04:00
raucao b04e2e153a Remove the dormant wormhole bot
wormhole has no run-list entry on any node; drop its recipe and data bag.
2026-10-28 18:22:22 +04:00
raucao 93fd33a3ef Remove host config for xmpp bots 2026-10-28 18:22:22 +04:00
raucao 552427a10b Track nodejs-5 and the kredits-github migration
Update the nodes submodule (nodejs-5 added, kredits-github moved off nodejs-4) and add the nodejs-5 client.
2026-10-28 18:22:21 +04:00
raucao 44f86d3f07 Serve kredits-github via openresty, on Node 22
Move kredits-github onto Node 22.23.4 and behind the openresty reverse proxy
on the proxy hosts, replacing its own nginx + the custom haproxy entry.

- pin Node 22.23.4; run the app with HOST=0.0.0.0 / NODE_ENV=production and
  open port 3000 to 10.1.1.0/24 so the proxy can reach it over ZeroTier
- create /opt/kredits-github owned by the deploy user before cloning
- add kredits-github::nginx_proxy (tls_cert_for + openresty_site, upstream
  from role:kredits_github) and register it in the openresty_proxy run list
- drop the app-node nginx recipe/template and its role entry
2026-10-28 18:22:21 +04:00
raucao bd4a6501ab Update Ubuntu base image to release-20261017
Refresh the noble cloud image so newly created VMs start with fewer pending
package upgrades. Old base images are left in place.
2026-10-28 18:22:21 +04:00
raucao fc55b0e062 Upgrade RTL to v0.15.15
Pin v0.15.15 and set blockExplorerUrl (config-only since 0.15.14). Discard
local checkout changes before the pinned checkout, and use
`npm ci --omit=dev --legacy-peer-deps` per upstream guidance.
2026-10-28 18:22:21 +04:00
raucao 5bb1499371 Move Node services onto patched releases for the eMudhra CA incident
Bump Node to patched releases (mastodon/sockethub 24.22.1, RTL 22.23.4).
Force the pinned major's latest patch in kosmos-nodejs: nodejs_install only
selects the repo major and a bare `package nodejs` never upgrades an already
installed package.

For hosts stuck on Node 16 (no patched 16.x), run the services with
NODE_OPTIONS=--use-openssl-ca so they use the patched system trust store:
ipfs-pinner, kredits-github, hubot botka/hal8000, sockethub.
2026-10-28 18:22:20 +04:00
raucao c76921da78 Vendor CAcert roots instead of fetching from cacert.org
cacert.org is intermittently unreachable, which fails bootstraps at the
remote_file step. Ship both roots in the cookbook and install them with
cookbook_file; contents match what was already installed fleet-wide.
2026-10-28 18:22:20 +04:00
raucao 6a9ff1eea0 Support Cinc in kosmos-base
Resolve the client config dir at runtime (Chef::Config[:config_file] /
:client_d_dir) instead of hardcoding /etc/chef, and create client.d when
missing so fresh nodes work.

Reload only the attributes file we just wrote, not the whole client.rb:
reloading client.rb reset chef_server_url and dropped knife-zero's -S (TCP)
override, so later server calls fell back to socketless chefzero and failed
with No socketless Cinc Zero server.
2026-10-28 18:22:20 +04:00
raucao 1c96ef42c6 Use Cinc by default for knife-zero bootstraps 2026-10-28 18:22:20 +04:00
raucao b3c9e1e139 Merge pull request 'Upgrade Gitea Runner to 5.2.2' (#686) from chore/upgrade_gitea-runner into master
Reviewed-on: #686
2026-10-25 09:27:43 +00:00
raucao ff1dd73509 Upgrade Gitea Runner to 5.2.2 2026-10-25 10:26:25 +01:00
raucao dc4771fd6b Merge pull request 'Upgrade Sockethub to 5.0.0-beta.0, serve info page' (#685) from chore/upgrade_sockethub into master
Reviewed-on: #685
2026-10-12 20:35:18 +00:00
raucao dea89ea2c0 Upgrade Sockethub to 5.0.0-beta.0, serve info page 2026-10-12 22:33:22 +02:00
raucao 2df9e00ab0 Merge pull request 'Ignore Chef config, provide example file' (#684) from dev/ignore_chef-config into master
Reviewed-on: #684
2026-10-11 10:28:03 +00:00
raucao 9bc9245583 Ignore Chef config, provide example file
This allows admins to adjust the config to their needs, e.g. using an
absolute path for `encrypted_data_bag_secret`.
2026-10-11 12:21:29 +02:00
raucao 8b1e6458d9 Merge pull request 'Upgrade Gitea Runner to 5.0.0' (#683) from chore/upgrade_gitea-runner into master
Reviewed-on: #683
2026-10-11 10:15:28 +00:00
raucao c1ccaf482a Upgrade Gitea Runner to 5.0.0 2026-10-11 12:12:52 +02:00
raucao 17285bc2c0 Merge pull request 'Upgrade Mastodon from 4.3 to 4.7, deploy on new Ubuntu 24.04 VM' (#681) from chore/upgrade_mastodon into master
Reviewed-on: #681
Reviewed-by: Greg <greg@kosmos.org>
2026-10-08 13:02:46 +00:00
raucao 63e4401715 Update Mastodon data bag, nodes 2026-10-08 14:28:16 +02:00
raucao 2bb5b582ec Deploy Mastodon from now on
The mastodon role now always deploys (deploy=true), so a plain converge rebuilds and restarts on new production-4.7 commits.
2026-10-08 12:43:35 +02:00
raucao 8ac0b965b2 Declare the search deploy unit before the migration chain
The migration chain starts mastodon-search-deploy.service immediately, but the systemd_unit resource was declared later in the recipe, so the unit did not exist yet and systemctl failed with 'Unit not found'.
2026-10-08 12:21:24 +02:00
raucao af4983d747 Record revision stamps as the mastodon user
The stamp files' lazy git call ran as root, which git rejects on the mastodon-owned repository (dubious ownership), silently writing an empty stamp. Use execute resources with the mastodon user instead so git works and the revision is recorded.
2026-10-08 11:51:23 +02:00
raucao 1b564c285d Give the mastodon user a /home/mastodon home
The mastodon user's home was /opt/mastodon, i.e. the clone destination, so writing the SSH deploy key into ~/.ssh made the directory non-empty and Chef's git resource silently skipped cloning (it only clones into an empty directory). Use a dedicated /home/mastodon home for the user and keep the clone destination separate. Also clear a non-git (partial) clone destination before cloning.
2026-10-08 11:43:47 +02:00
raucao 0696d03374 Replace the removed bundler --deployment flag
Bundler 4 (shipped with Ruby 4) removed --deployment. Use 'bundle config set --local deployment true' (frozen + vendor/bundle) and the 'without' setting instead, in the Mastodon, akkounts and liquor-cabinet cookbooks.
2026-10-08 11:34:46 +02:00
raucao b0718a5dac Ensure the SSH deploy key ends with a newline
OpenSSH's PEM parser rejects a private key file without a trailing newline ('error in libcrypto').
2026-10-08 11:30:09 +02:00
raucao aeeb900f14 Add repo deploy key 2026-10-08 10:53:51 +02:00
raucao a3877e620e Create the mastodon home directory in the dependencies recipe
The user resource does not manage the home directory, so removing /opt/mastodon broke the build phase when it tried to create /opt/mastodon/.ssh.
2026-10-07 19:49:52 +02:00
raucao abfd654ae5 Clone the private Mastodon repo with an SSH deploy key
The repository is private, so use git@gitea.kosmos.org with a read-only deploy key stored in credentials/mastodon (repo_deploy_key). The pinned gitea host key is an attribute.
2026-10-07 19:41:43 +02:00
raucao d05f00dae2 Pre-stage the Mastodon 4.7 build on mastodon-4 2026-10-07 18:08:30 +02:00
raucao fb0c7b2b1c Add a build phase, make deployment revision-driven
Split the deployment into kosmos-mastodon::build (checkout + bundle/yarn/assets, no database) and kosmos-mastodon::deploy (migrations + services), dispatched by the new 'build' attribute. Both phases are idempotent per checked-out revision via stamps, and the migration/restart/search-index chain is now triggered by the deployed revision instead of the git resource, so it still runs when the build was pre-staged.
2026-10-07 18:08:22 +02:00
raucao 9dfdf6bc9b Remove the backup gem from Mastodon
The shared backup cookbook hardcodes postgresql-client-12, which does not exist on Ubuntu 24.04. Drop the Mastodon backup recipe and its role inclusion; the PostgreSQL standby is the safety net. The backup cookbook itself is still used by other services.
2026-10-07 17:53:57 +02:00
raucao ec2645c5da Install LibreTranslate in a virtualenv
Ubuntu 24.04's system Python is externally managed (PEP 668) and refuses pip installs. Also bump LibreTranslate from 1.3.8 to 1.9.6, since the former pulls ctranslate2 2.24.0 which has no Python 3.12 wheels.
2026-10-07 17:44:16 +02:00
raucao b09808b12e Drop the java cookbook dependency
The java cookbook's openjdk recipe unconditionally adds the dead openjdk-r PPA on Ubuntu and cannot be told not to, which breaks on Ubuntu 24.04. Elasticsearch 7.x ships a bundled JDK and no JAVA_HOME is configured, so no system Java is needed.
2026-10-07 17:26:40 +02:00
raucao 8a11cd88f7 Create search indices during deploy, import in background
Mastodon 4.4+ can create/upgrade the Elasticsearch indices and mappings without importing data. Do that synchronously during the deployment so search does not fail on a missing index, then populate the (potentially very long) import via a systemd unit started with --no-block so the maintenance window is not extended.
2026-10-07 17:17:27 +02:00
raucao 9fe5def5f9 Move Mastodon deploy flag to the mastodon role
Set kosmos-mastodon.deploy to false as a role default, making it overridable per node, and drop the node-level attribute.
2026-10-07 16:51:18 +02:00
raucao fef57f1ee1 Update mastodon-4 node to dependency-only deployment 2026-10-07 16:41:40 +02:00
raucao 591d6dc4ec Split Mastodon runtime deps from deployment, use Redis cluster
Add a kosmos-mastodon::dependencies recipe with everything needed to run Mastodon (Node, Ruby, libvips, Elasticsearch, packages) but without the app deployment. The default recipe includes it and only runs the deployment when node['kosmos-mastodon']['deploy'] is true, so a VM can be prepared ahead of a maintenance window.

Stop using the local redisio instance and connect to the external Redis cluster (redis_server role, db 2, password from the credentials data bag) instead. Remove the redisio service dependencies from the systemd units and drop the redisio cookbook dependency.
2026-10-07 16:41:28 +02:00
raucao 735145f5a9 Add mastodon-4 node and client config 2026-10-07 16:13:53 +02:00
raucao b60ca687ec Upgrade Mastodon to 4.7
Bump the production branch to 4.7 and adjust for the changes between 4.3 and 4.7:

- Node 24.21.0 and Ruby 4.0.7 (via ruby-build v20260924)
- Redis 7.4.11 (Mastodon 4.5 requires >= 7.0)
- Replace ImageMagick with libvips (required since 4.6) and libidn11 with libidn
- Split database migrations into pre-/post-deployment phases and rebuild
  the Elasticsearch accounts index mappings (required since 4.4)
- Remove the OTP_SECRET environment variable (removed in 4.4)
- Disable email subscriptions (new optional feature in 4.6) and force the
  default locale (DEFAULT_LOCALE no longer overrides it since 4.4)
- Add the new fasp Sidekiq queue
- Enable corepack for yarn instead of the removed no-arg 'corepack prepare'
2026-10-07 16:12:48 +02:00
raucao c72fe46e3e Merge pull request 'Update Gitea to 28.1.0' (#680) from chore/upgrade_gitea into master
Reviewed-on: #680
2026-10-06 21:09:13 +00:00
raucao 3d733e6980 Update Gitea to 28.1.0 2026-10-06 23:08:19 +02:00
greg d48b9fc9dc Merge pull request 'Migrate to new Redis cluster' (#679) from chore/migrate_redis into master
Reviewed-on: #679
Reviewed-by: Greg <greg@kosmos.org>
2026-10-06 15:33:12 +00:00
raucao 103ce389de Updated nodes (Redis migration) 2026-10-06 17:26:54 +02:00
raucao 9c7f5cee21 Add Redis password to akkounts, liquor cabinet 2026-10-06 17:22:09 +02:00
raucao df36aff732 Merge pull request 'Upgrade ejabberd, fix its cookbook test suite' (#677) from chore/upgrade_ejabberd into master
Reviewed-on: #677
Reviewed-by: Greg <greg@kosmos.org>
2026-10-05 14:30:35 +00:00