Skip to content

Commit 642d7bc

Browse files
authored
Merge pull request #1245 from Dasharo/freebsd-fwupd-capsules
fwupd guide for FreeBSD
2 parents 975f7db + 67b0ebc commit 642d7bc

File tree

1 file changed

+167
-40
lines changed

1 file changed

+167
-40
lines changed

docs/kb/fwupd.md

Lines changed: 167 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,27 @@ The `fwupd` daemon relies on the Linux Vendor Firmware Service (LVFS)
1111
for distributing and managing the firmware binaries to the users.
1212

1313
!!! note
14-
`fwupd` depends on
14+
The use of `fwupd` for firmware updates depends on
1515
[Capsule Updates](../guides/capsule-update.md)
16-
support. Refer to the "Firmware update" section of your device
17-
documentation (like [this one](../unified/novacustom/firmware-update.md)).
16+
support. Check that your device and its firmware are listed in the
17+
["Supported devices" section](../guides/capsule-update.md#supported-devices)
18+
there.
1819

1920
## Firmware Update Prerequisites
2021

2122
### Intel ME
2223

23-
This only applies to devices with an Intel Management Engine that are not fused
24-
using the [Dasharo Trust Root](../glossary.md#dasharo-trustroot)
25-
technology, and use Dasharo versions released before 2026. Check your release
26-
notes to verify if the step is required.
24+
This only applies to devices with the Intel Management Engine that are not fused
25+
using the [Dasharo Trust Root](../glossary.md#dasharo-trustroot) technology and
26+
don't yet use Capsules V2.
2727

2828
Intel Management Engine needs to be disabled manually to successfully perform an
2929
fwupd update. Failing to do so won't do any harm to the system, but the update
3030
will be rejected.
3131

32-
Intel ME needs to be switched to the `Disabled (HAP)` state using the Setup Menu
33-
to perform the update. It cannot be done automatically by fwupd. Afterwards,
34-
Intel ME needs to be manually turned back on if desired.
32+
Intel ME needs to be switched to the `Disabled (HAP)` state in the Setup Menu
33+
to perform the update. This step cannot be done automatically by fwupd.
34+
Afterwards, Intel ME needs to be manually turned back on if desired.
3535

3636
Check [Intel Management Engine Options](../dasharo-menu-docs/dasharo-system-features.md#intel-management-engine-options)
3737
documentation for details on how to set ME mode to `Disabled (HAP)`.
@@ -42,7 +42,7 @@ for more context.
4242
### Charger connected
4343

4444
On battery-powered devices (laptops), the AC charger must be connected
45-
before running fwupdmgr to start the update. It must be connected
45+
before running `fwupdmgr` to start the update. It must be connected
4646
for the whole duration of the update, until the device boots back up normally.
4747

4848
## Usage
@@ -63,21 +63,21 @@ are met.
6363
### CLI
6464

6565
For more advanced users or in a more lightweight
66-
DEs/WMs `fwupdmgr` can be used in the terminal.
66+
DEs/WMs `fwupdmgr` command can be used in the terminal.
6767

6868
#### Installation
6969

7070
Most Operating Systems come with fwupd preinstalled and use
7171
it to perform firmware updates.
7272

7373
=== "Windows"
74-
Dasharo Capsule Updates using fwupdmgr are not currently supported on
74+
Dasharo Capsule Updates using `fwupdmgr` are not currently supported on
7575
Windows. If that is the only Operating System you wish to use, other update
7676
methods need to be considered.
7777

7878
=== "Ubuntu"
79-
Check if fwupdmgr is installed. Executing the command should
80-
print the versions of all fwupdmgr components:
79+
Check if `fwupdmgr` is installed. Executing the command should
80+
print the versions of all `fwupdmgr` components:
8181

8282
```bash
8383
$ fwupdmgr --version
@@ -108,8 +108,8 @@ it to perform firmware updates.
108108
```
109109

110110
=== "Fedora"
111-
Check if fwupdmgr is installed. Executing the command should
112-
print the versions of all fwupdmgr components:
111+
Check if `fwupdmgr` is installed. Executing the command should
112+
print the versions of all `fwupdmgr` components:
113113

114114
```bash
115115
$ fwupdmgr --version
@@ -139,12 +139,12 @@ it to perform firmware updates.
139139

140140
=== "QubesOS"
141141

142-
To use fwupdmgr on QubesOS, the program needs to be run on
142+
To use `fwupdmgr` on QubesOS, the program needs to be run on
143143
the `dom0` qube, and it requires an internet connection.
144-
For that reason, a fwupdmgr wrapper for QubesOS exists,
144+
For that reason, a `fwupdmgr` wrapper for QubesOS exists,
145145
that sets up the network tunnels for the firmware update
146-
downloads to be possible from dom0.
147-
The qubes-fwupdmgr package should be installed out of the box.
146+
downloads to be possible from `dom0`.
147+
The `qubes-fwupdmgr` package should be installed out of the box.
148148
Executing the command should print the help screen:
149149

150150
```bash
@@ -182,9 +182,76 @@ it to perform firmware updates.
182182
```
183183
</details>
184184

185+
=== "FreeBSD"
186+
187+
!!! warning
188+
`fwupd` on FreeBSD is very much work in progress as of March 2026. The
189+
basic elements are there, but user experience may be far from perfect.
190+
In particular, not all functionality is available (e.g., `fwupd` won't
191+
reboot for you, update may be reported as "in progress" after it has
192+
been applied) or works reliably (may complain about missing ESP,
193+
although this error may be gone on second try or after restarting
194+
`fwupd`). In addition to that, FreeBSD loader and/or kernel has issues
195+
with ESRT which may prevent `uefi_capsule` plugin of `fwupd` from
196+
working.
197+
198+
`fwupd` is available in ports, but the version there lacks UEFI capsules.
199+
The necessary changes are being [upstreamed][D55590], until then a
200+
relatively complicated setup in necessary to have a chance of firmware
201+
updates working. The following instructions assume the system isn't
202+
configured much, make adjustments to not overwrite existing configuration if
203+
that's not the case.
204+
205+
Start by switching from "quaterly" to "latest" packages to have an already
206+
updated `bsdisks` (necessary to find ESP):
207+
208+
```terminal
209+
# mkdir -p /usr/local/etc/pkg/repos
210+
# sed 's!/quarterly!/latest!' /etc/pkg/FreeBSD.conf > /usr/local/etc/pkg/repos/FreeBSD.conf
211+
```
212+
213+
Then install `fwupd`, `bsdisks` and various build dependencies. A few ports
214+
will be reinstalled later, this step is just to reuse binary packages and
215+
not build everything from sources. Run the following command:
216+
217+
```terminal
218+
# pkg install fwupd bsdisks meson help2man noto-sans py311-Jinja2 py311-pygobject py311-pangocffi gettext-tools pkgconf vala dbus cmake ninja git
219+
```
220+
221+
Now get the version of ports with necessary fixes and reinstall the
222+
packages (cloning will take time, building can too; there will also be a few
223+
dialogs about port options, just agreeing should do but can choose to not
224+
build documentation):
225+
226+
```terminal
227+
# git clone --branch=fwupd-2026 --depth=1 --filter=blob:none https://github.com/3mdeb/freebsd-ports /usr/ports
228+
# make -C /usr/ports/devel/efivar/ deinstall
229+
# make -C /usr/ports/devel/gnu-efi/ reinstall
230+
# make -C /usr/ports/sysutils/fwupd-efi/ reinstall
231+
# make -C /usr/ports/sysutils/fwupd/ reinstall
232+
```
233+
234+
`fwupd` communicates with `bsdisks` over D-Bus, so it must be running
235+
(`fwupdmgr` also depends on D-Bus, otherwise using `fwupdtool` as root is
236+
the only option). It can be enabled permanently and then launched like
237+
this:
238+
239+
```terminal
240+
# echo 'dbus_enable="YES"' >> /etc/rc.conf
241+
# service dbus start
242+
```
243+
244+
This is how to start D-Bus temporarily:
245+
246+
```terminal
247+
# service dbus onestart
248+
```
249+
250+
[D55590]: https://reviews.freebsd.org/D55590
251+
185252
### Checking the current firmware version
186253

187-
=== "Ubuntu, Fedora"
254+
=== "Ubuntu, Fedora, FreeBSD"
188255
To check the currently used firmware version, run the following command
189256

190257
```bash
@@ -212,7 +279,7 @@ it to perform firmware updates.
212279
</details>
213280

214281
=== "QubesOS"
215-
To check for available updates for your device, run the following command
282+
To check the currently used firmware version, run the following command
216283

217284
```bash
218285
$ sudo qubes-fwupdmgr get-devices
@@ -246,7 +313,7 @@ it to perform firmware updates.
246313
UpdateState 2
247314
```
248315
As of QubesOS R4.2.3, the firmware version is not interpreted correctly
249-
by fwupdmgr.
316+
by `fwupdmgr`.
250317
As a fallback on Dasharo firmware, use `dmidecode` to verify the firmware version.
251318
Run:
252319
```bash
@@ -260,7 +327,7 @@ it to perform firmware updates.
260327

261328
### Checking for updates
262329

263-
=== "Ubuntu, Fedora"
330+
=== "Ubuntu, Fedora, FreeBSD"
264331
To check for available updates for your device, run the following commands
265332

266333
```bash
@@ -330,7 +397,7 @@ it to perform firmware updates.
330397
```
331398

332399
!!! warning
333-
As of QubesOS R4.3 on 02-2026, qubes-fwupdmgr might not work correctly
400+
As of QubesOS R4.3 on 02-2026, `qubes-fwupdmgr` might not work correctly
334401
and the updates on LVFS may not be found using this tool. Refer to
335402
[troubleshooting](#no-updates-available-qubesos).
336403

@@ -398,18 +465,52 @@ are met.
398465
```
399466

400467
!!! warning
401-
As of QubesOS R4.3 on 02-2026, qubes-fwupdmgr might not work correctly
468+
As of QubesOS R4.3 on 02-2026, `qubes-fwupdmgr` might not work correctly
402469
and the updates on LVFS may not be found using this tool. Refer to
403470
[troubleshooting](#no-updates-available-qubesos).
404471

472+
=== "FreeBSD"
473+
To update your firmware, run the following commands:
474+
475+
```terminal
476+
# fwupdmgr refresh
477+
# fwupdmgr update --no-reboot-check
478+
# reboot
479+
```
480+
481+
<details><summary>Example of an update process:</summary>
482+
```
483+
# fwupdmgr update --no-reboot-check
484+
Devices with no available firmware updates:
485+
• UEFI dbx
486+
• SSDPR-PX600-250-80
487+
╔══════════════════════════════════════════════════════════════════════════════╗
488+
║ Upgrade System Firmware from 1.0.0 to 1.0.1? ║
489+
╠══════════════════════════════════════════════════════════════════════════════╣
490+
║ New Dasharo firmware release for the NovaCustom Meteor Lake laptops ║
491+
║ ║
492+
║ with integrated graphics, featuring numerous bug fixes, performance ║
493+
║ ║
494+
║ improvements and stability fixes. ║
495+
║ ║
496+
║ V54x_6x_TU must remain plugged into a power source for the duration of the ║
497+
║ update to avoid damage. ║
498+
╚══════════════════════════════════════════════════════════════════════════════╝
499+
Perform operation? [Y|n]: y
500+
Waiting… [***************************************]
501+
Successfully installed firmware
502+
Do not turn off your computer or remove the AC adapter while the update is in progress.
503+
```
504+
</details>
505+
405506
!!! warning
406-
After the command finishes, fwupd will instruct the device to reboot.
507+
After the command finishes, a reboot is necessary to apply the update.
407508
The fwupd UEFI application that performs the update will be booted
408-
automatically after a reboot, unless there's user interaction
509+
automatically after a reboot, unless there is a user interaction.
409510
Entering the Setup Menu, Boot Manager, or interfering in any other way will
410511
abort the update.
411512
Allow the device to reboot freely, and do not press any buttons until the
412-
update finishes.
513+
update finishes unless there is a dialog related to the update.
413514

414515
Devices that have an Embedded Controller
415516
[might stay powered off after the update][dts-ec-update] and need to be
@@ -438,11 +539,28 @@ source. We will use `novacustom_v54x_mtl_igpu_v1.0.1_btg_prod.cab` downloaded fr
438539
$ sudo fwupdmgr local-install novacustom_v54x_mtl_igpu_v1.0.1_btg_prod.cab
439540
```
440541

542+
=== "FreeBSD"
543+
To update your firmware using a locally available cabinet file, follow the
544+
steps:
545+
546+
1. Allow updates from untrusted sources
547+
```terminal
548+
# printf '[fwupd]\nOnlyTrusted=false\n' > /usr/local/etc/fwupd/fwupd.conf
549+
```
550+
2. Perform a local install
551+
```terminal
552+
# fwupdmgr local-install --no-reboot-check novacustom_v54x_mtl_igpu_v1.0.1_btg_prod.cab
553+
```
554+
3. Reboot to apply the update
555+
```terminal
556+
# reboot
557+
```
558+
441559
#### Update troubleshooting
442560

443561
##### No output from fwupdmgr update
444562

445-
Depending on the version of fwupdmgr, issues like the AC being disconnected on
563+
Depending on the version of `fwupdmgr`, issues like the AC being disconnected on
446564
battery-powered devices might not be printed explicitly right away after
447565
trying to perform an update. In such a case, try running the `get-devices` command
448566
and look for the `Problems` header and red text under device entries.
@@ -538,12 +656,12 @@ The check for an AC charger being connected in Linux fails when the firmware
538656
configures a [charging threshold](http://127.0.0.1:8000/unified/novacustom/features/#charge-thresholds)
539657
for the battery that disconnects the charger once the battery reaches the threshold.
540658
If the battery is considered full and not charging at the moment, the check in
541-
fwupdmgr will think the charger is disconnected.
659+
`fwupdmgr` will think the charger is disconnected.
542660

543661
There are two options to work around this issue:
544662

545663
- Deplete battery charge a couple of percent, so that it
546-
doesn't stop charging for the duration of fwupdmgr running the checks.
664+
doesn't stop charging for the duration of `fwupdmgr` running the checks.
547665
- Disable battery charging thresholds in the firmware.
548666

549667
##### No updates available (QubesOS)
@@ -602,17 +720,26 @@ manually from fwupd.org.
602720
</details>
603721

604722
This output means the firmware version has changed to the expected one.
605-
To manually verify this has really happened, refer to
606-
[Checking The Current Firmware Version](#checking-the-current-firmware-version).
607723

608724
=== "QubesOS"
609-
To update your firmware, run the following commands:
725+
`qubes-fwupdmgr` doesn't currently support `get-results` command of
726+
`fwupdmgr`.
727+
728+
=== "FreeBSD"
729+
The following command is supposed to report update results:
610730

611731
```bash
612-
$ sudo qubes-fwupdmgr refresh
613-
$ sudo qubes-fwupdmgr update
732+
$ fwupdmgr get-results
614733
```
615734

735+
However, this is likely to not produce any results because fwupd fails to
736+
finalize the update. `fwupdmgr get-devices` incorrectly states that "An
737+
update is in progress" along with displaying version that shows the update
738+
has already happened.
739+
740+
For another way to verify an update has really happened refer to
741+
[Checking The Current Firmware Version](#checking-the-current-firmware-version).
742+
616743
#### Update result troubleshooting
617744

618745
##### Failed to run update on reboot: expected ... and got
@@ -651,14 +778,14 @@ Device Flags: • Internal device
651778
```
652779
</details>
653780

654-
When that happens after rebooting, instead of am update
781+
When that happens after rebooting, instead of an update
655782
progress bar, a message like this will appear on top of the screen:
656783

657784
```txt
658785
[FIRMWARE WARNING] Capsule Updates are only supported while Intel ME is in HAP mode!
659786
```
660787

661-
Make sure the Intel ME mode in the Setup menu is `Disabled (HAP)`. Refer to the
788+
Make sure the Intel ME mode in the Setup Menu is `Disabled (HAP)`. Refer to the
662789
[prerequisites section](#firmware-update-prerequisites) and try again.
663790

664791
## References

0 commit comments

Comments
 (0)