Skip to content

Track FTL's OpenSSL, nghttp2 and nghttp3 dependencies in the compile guide - #1400

Open
DL6ER wants to merge 4 commits into
masterfrom
new/openssl
Open

Track FTL's OpenSSL, nghttp2 and nghttp3 dependencies in the compile guide#1400
DL6ER wants to merge 4 commits into
masterfrom
new/openssl

Conversation

@DL6ER

@DL6ER DL6ER commented Jul 10, 2026

Copy link
Copy Markdown
Member

Note

Both FTL PRs this documents are merged into development: pi-hole/FTL#2941 (OpenSSL migration) and pi-hole/FTL#2976 (HTTP/2 and HTTP/3 webserver). This can be merged whenever.

What

Brings the FTL compile-from-source guide in line with what development actually builds against: OpenSSL instead of mbedTLS, plus the two new nghttp2/nghttp3 dependencies. Also fixes the page's table of contents, which never rendered correctly.

Details

OpenSSL replaces mbedTLS

  • The libmbedtls section is gone; a Compile OpenSSL from source section takes its place. mbedTLS is no longer used anywhere in development, so keeping both would only be confusing.
  • Uses OpenSSL 4.0, the version FTL is developed against and the only one providing the native QUIC API our HTTP/3 support needs. A note explains that an older OpenSSL (e.g., 3.5.7) builds fine but silently drops HTTP/3 and QUIC.
  • Mirrors the ftl-build container's trimmed no-* configure flags (static-only libssl/libcrypto, no legacy provider, no unused protocols/ciphers, no DSO). no-ssl3 and no-engine are dropped compared to the container's 3.x flags, as both are already removed in 4.0.
  • Uses ./config (auto target detection) rather than the container's per-arch case/./Configure - a native host build does not cross-compile.
  • The mbedTLS threading sed patch is gone as well, as OpenSSL enables threading by default.
  • make install_dev installs only headers and static libraries, so no openssl CLI or man pages end up on the host.

New nghttp2 and nghttp3 sections

FTL serves the web interface and the API over HTTP/2 and HTTP/3 now, so both libraries get their own build section. They are technically optional - without them FTL falls back to HTTP/1.1 - but we install both so a locally built binary matches the official release.

Which branch these instructions describe

A note at the top states that the guide follows development, i.e., the code the next release is built from, and that other branches or older releases may need different dependencies. It deliberately avoids naming a concrete difference so it does not go stale after the next release.

Table of contents

mkdocs only renders a table of contents when a page has at most one first-order heading. This page had two (Install native build environment and Use containerized build environment), so the ToC came out distorted. Every heading is shifted down one level, the same fix we applied to signals.md in b1e926c. The Caution section becomes a !!! warning admonition on the way, as a single sentence does not warrant a section of its own.

@netlify

netlify Bot commented Jul 10, 2026

Copy link
Copy Markdown

Deploy Preview for pihole-docs ready!

Name Link
🔨 Latest commit dd2bf7d
🔍 Latest deploy log https://app.netlify.com/projects/pihole-docs/deploys/6a7849aecbd00900080d9c2d
😎 Deploy Preview https://deploy-preview-1400--pihole-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@DL6ER DL6ER mentioned this pull request Jul 10, 2026
5 tasks
@DL6ER
DL6ER force-pushed the new/openssl branch 2 times, most recently from 7eddb99 to 797b5b5 Compare July 10, 2026 18:12
@DL6ER DL6ER changed the title docs: migrate FTL from-source build from mbedTLS to OpenSSL Migrate FTL from-source build docs from mbedTLS to OpenSSL Jul 10, 2026
FTL's `development` branch links against OpenSSL 3.5 while `master` still
uses mbedTLS. Document the OpenSSL 3.5.7 build (mirroring the `ftl-build`
container, using `./config` for native host target auto-detection) next to
the existing mbedTLS instructions, and note which branch needs which library.
The mbedTLS section can be dropped once the next FTL release ships OpenSSL.

Signed-off-by: DL6ER <dl6er@dl6er.de>
@DL6ER DL6ER changed the title Migrate FTL from-source build docs from mbedTLS to OpenSSL Add OpenSSL from-source build instructions alongside mbedTLS Jul 10, 2026
@DL6ER DL6ER changed the title Add OpenSSL from-source build instructions alongside mbedTLS Add OpenSSL from-source build instructions Jul 10, 2026
@DL6ER

DL6ER commented Jul 10, 2026

Copy link
Copy Markdown
Member Author

Should be merged after pi-hole/FTL#2941 has been merged as the text says that development is using OpenSSL.

@DL6ER
DL6ER marked this pull request as ready for review July 10, 2026 18:38
@DL6ER
DL6ER requested a review from a team as a code owner July 10, 2026 18:38
Copilot AI review requested due to automatic review settings July 10, 2026 18:38

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@DL6ER DL6ER changed the title Add OpenSSL from-source build instructions Add OpenSSL from-source build instructions alongside mbedTLS Jul 10, 2026
@DL6ER

DL6ER commented Jul 10, 2026

Copy link
Copy Markdown
Member Author

Keeping both the mbedTLS and OpenSSL instructions on purpose for now (a bit of Zweigleisigkeit): FTL on master still links against mbedTLS, while development has switched to OpenSSL. As long as that split exists, the guide should cover whichever branch a reader checks out, so both sections stay.

Once the next FTL release (the one including the OpenSSL migration) is out, the mbedTLS section can be removed. Until then, having both does not hurt, which is why this PR no longer depends on pi-hole/FTL#2941 and can be merged at any time.

DL6ER added 2 commits July 21, 2026 21:20
FTL targets OpenSSL 4.0 (it ships SSL_get_peer_addr, which the later DoQ work
needs). Bump the from-source instructions to 4.0.0 and drop no-ssl3 / no-engine
from the config line: SSLv3 and the ENGINE API are already removed in 4.0, so
both are only accepted there as deprecated Configure options.

Signed-off-by: DL6ER <dl6er@dl6er.de>
The from-source guide now follows the `development` branch explicitly, with a
note that it may not match `master` or older releases. Since `development` moved
its webserver TLS stack to OpenSSL, remove the `libmbedtls` section and the
master-vs-development hedge and keep OpenSSL as the single path.

Also make the build feature-complete: call out OpenSSL 4.0 (with a note that an
older 3.5.x works but disables the HTTP/3 and QUIC features), and add
`nghttp2`/`nghttp3` from-source steps so a locally built binary serves HTTP/2 and
HTTP/3 like the official release.

Signed-off-by: DL6ER <dl6er@dl6er.de>
Comment thread docs/ftldns/compile.md Outdated

@yubiuser yubiuser left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The whole ToC for this page is distorted. Install native build environment and Use containerized build environment are not part of the ToC. I suspect, it's because both use a level one heading. I think it would work, if all headings are moved one level down (# -> ##, ## -> ###,..)

Comment thread docs/ftldns/compile.md Outdated
Comment thread docs/ftldns/compile.md
Comment thread docs/ftldns/compile.md Outdated
`mkdocs` only renders a table of contents when a page has at most one
first-order heading. `compile.md` had two (`Install native build
environment` and `Use containerized build environment`), so the ToC came
out distorted. Shift every heading down one level, matching what we
already did for `signals.md`.

Two more review points:

1. Drop the mbedTLS/OpenSSL example from the introductory note. The note
   is about `development` differing from `master` in general, and that
   particular difference disappears with the next release - without the
   example the note stays true indefinitely.
2. Turn the `Caution` section into a `!!! warning` admonition. It is a
   single-sentence aside, not a section of its own, and it no longer
   shows up in the ToC as a sibling of the real build steps.

Signed-off-by: DL6ER <dl6er@dl6er.de>
@DL6ER DL6ER changed the title Add OpenSSL from-source build instructions alongside mbedTLS Track FTL's OpenSSL, nghttp2 and nghttp3 dependencies in the compile guide Aug 9, 2026
@DL6ER

DL6ER commented Aug 9, 2026

Copy link
Copy Markdown
Member Author

You are right about the cause. All headings moved down one level, same as we did for signals.md in b1e926c, so the ToC renders properly now.

@yubiuser yubiuser left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for taken some time to improve documentation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants