fix(linux): install libssl-dev so erlang builds with crypto and ssl - #105
Merged
Conversation
OTP's configure probes for libssl-dev by name. Without it, it emits a WARNING rather than an error and skips the crypto, ssl and ssh applications, and the build then reports success. mise installs a working-looking erlang whose crypto module does not exist, and the breakage surfaces much later as crypto:strong_rand_bytes/1 raising undef: no hex fetch, no TLS listener, and every Elixir project on the host inherits it. libssl3t64 was already installed; only the headers were missing, the same runtime-vs-headers split that bit libyaml. The package was listed as deliberately absent, on the grounds that mise's ruby-build downloads and builds its own OpenSSL into the ruby prefix. That is still true of ruby, and was the wrong thing to generalise from: ruby-build vendors OpenSSL and erlang's configure does not, so an absence justified by one toolchain silently broke another. Confirmed from the kerl build log rather than inferred. The observation entry, which said "likely cause" before this, now carries the quoted configure output, the third skipped application (ssh, which it had missed), and the rebuild command. This change alone does not fix the host: the headers matter only at build time, so the existing install still needs `mise uninstall erlang@28.3 && mise install erlang@28.3` afterwards. Claude-Session: https://claude.ai/code/session_01F8oKrXASMQSXMVjSvuJpn9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds
libssl-devtolinux_apt_packages, overturning a recorded decision thatsaid it was deliberately absent.
Why
The mise-managed Erlang 28.3 on the Linux host has no
cryptoapplication atall.
erl -eval 'crypto:strong_rand_bytes(4)'raisesundef, and the install'slib/holds 32 app dirs with nocryptoand nosslamong them.The cause is confirmed from the kerl build log rather than inferred
(
~/.cache/mise/erlang/kerl/builds/28.3/otp_build_28.3.log):Two details worth pulling out of that:
sshgoes too.working-looking erlang and the breakage surfaces only at first use. This is
the same silent-skip failure mode the surrounding comment block already warns
about for ruby extensions built under
--with-ext=...,+.libssl3t64(the runtime) was already installed; only the headers were missing— the same runtime-vs-headers split that bit
libyamland is documented twolines above.
The decision this overturns
The comment previously read:
That is still true of ruby. It was the wrong thing to generalise from:
ruby-build vendors OpenSSL, erlang's
configuredoes not. An absence justifiedby one toolchain silently broke another. The rewritten comment records the
superseded reasoning rather than dropping it, matching how the Vulkan and Steam
blocks in the same file handle their own reversals.
Scope note — this does not fix the host by itself
The headers matter only at build time, so the existing erlang install is
unaffected by this change. After it lands, the host still needs:
The last line should print a binary rather than
undef.Side effect, stated rather than buried
With
libssl-devpresent, a futuremise install rubymay link the systemOpenSSL instead of vendoring its own — ruby-build prefers the system copy when
it is recent enough. Existing ruby installs are untouched. This is arguably the
better outcome by this file's own stated logic ("apt packages are patched by
unattended-upgrades, mise-managed ones are not"), but it is a behaviour change,
not a no-op.
Also in this PR
specs/_observations/entries/2026-08-06-erlang-no-crypto-b558b441.mdisupdated: its "likely cause" is promoted to confirmed with the quoted configure
output, the missed third application (
ssh) is added, the serving-sideconsequence (a Phoenix or Cowboy endpoint cannot terminate HTTPS without
ssl)is folded in alongside the fetching-side one it already had, and the rebuild
command is recorded.
Verification
yamllint,gitleaks,syntax-checkandansible-lintall pass via thepre-commit hooks. The package list parses to 51 entries with no duplicates and
no collision with
linux_apt_packages_absent. The diff was checked to confirmit removes nothing from #104's stale-declaration corrections to this same file.
Not verified here: that the rebuilt erlang actually gains
crypto. That needsthe host convergence run, and is the first thing to check afterwards.