On System > Software Update > Distribution Update, I see the warning:
“You need to have at least 5 Gb of free space available on primary disk to
perform a distribution update.”
The Start Distribution Update button stays inactive, even after freeing up space.
If I extract the link from the button in Developer Tools, I can manually navigate to the next page, but I’m hesitant to start since I’m not sure the condition is actually satisfied.
My situation
Initially had <5GB free.
What I tried:
Removed several snapshots
Reluctantly removed temporarily disabled apps.
Checked for freedombox-dist-upgrade.service, but it doesn’t exist (so I suppose the upgrade never started).
Plinth’s Storage app now shows ~5GB free.
I’m still seeing the warning and disabled button.
I’d very much prefer not to remove any of the apps I have active as I rely on them and use all of them daily.
Questions:
Does FreedomBox evaluate free space differently than what the Storage app reports?
What logs or commands can I run to confirm why the upgrade button remains disabled?
Will the button become enabled once I meet the storage space condition or is this a UI bug?
You could copy your microSD to a 64 GB microSD with dd. I know that this uses a lot of care. This is how I do it: I open the drive manager (client computer), connect the device with the data I want to have a copy of, write it to the if= (in the example below /dev/sdc) and then I connect the empty device, where the copy should go to and write the device name to of= (in the example below /dev/sdd)
Only reason the message “You need to have at least 5 GB…” is shown is because there is not enough space. There are no other conditions that trigger this message.
Free space is checked slightly differently from Storage app. The command that is run is df –output=avail /. Please run this command on the console (Cockpit, SSH, or direct Terminal) and ensure the value is greater than 5,000,000 (this value is in KiB).
The value of 5 GB is our rough estimate for disk space required when there are a lot of apps installed (and need upgrading). In practice, few people actually need that much space. So, if you are close to it, feel free to violate that.
The check is only in UI and if you bypass it, the backend process won’t stop you.
Note that if there is free space at the end of the disk like in this case, Storage app will show a message to expand the root partition and will allow you to expand with a simple click (this can also be done by re-running setup for the Storage app).
Hello! I tried bypassing the UI and started the distribution upgrade process. This morning, everything was the same. I checked for freedombox-dist-upgrade.service and it didn’t exist.
I checked the logs via the Cockpit terminal using journalctl -f and re-run the distribution upgrade. Once again, the process didn’t complete.
The one error that stood out to me was:
Aug 20 09:47:06 freedombox systemd-inhibit[17900]: {"result": "exception", "exception": {"module": "builtins", "name": "RuntimeError", "args": ["Apt command failed with return code: 100"], "traceback": [" File \"/usr/lib/python3/dist-packages/plinth/actions.py\", line 398, in _privileged_call\n return_values = func(*arguments['args'], **arguments['kwargs'])\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"/usr/lib/python3/dist-packages/plinth/modules/upgrades/privileged.py\", line 262, in dist_upgrade\n distupgrade.perform()\n", " File \"/usr/lib/python3/dist-packages/plinth/modules/upgrades/distupgrade.py\", line 419, in perform\n _apt_full_upgrade()\n", " File \"/usr/lib/python3/dist-packages/plinth/modules/upgrades/distupgrade.py\", line 360, in _apt_full_upgrade\n _apt_run(['full-upgrade', '-o', 'Dpkg::Options::=--force-confnew'])\n", " File \"/usr/lib/python3/dist-packages/plinth/modules/upgrades/distupgrade.py\", line 78, in _apt_run\n raise RuntimeError(\n"]}}
The error simply says that the command ‘apt-get full-upgrade has failed’. Will you be able to send me more complete journal containing actual apt-get command failure and its reason?
@fefekrzr I have noticed that FreedomBox is trying to upgrade Bind and MiniDLNA apps (because they have configuration file prompts that can’t be dealt by unattended-upgrade). However, both the operations are failing because apt in an state that can’t be recovered from. Apt throws the following error:
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
Please try the following:
apt-mark showhold
For each package that is held, run:
apt-mark unhold {package_name}
Then run:
dpkg --configure -a
apt -f install
During this if there are configuration file prompts for MiniDLNA, choose “Install new configuration”. For Bind choose “Keep old configuration”. After that re-run setup for both the apps in FreedomBox. If all this succeeds, try Distribution Upgrade again. Post any errors otherwise.
This commands show empty output. I imagine there are no packages on hold.
I tested running apt-mark unhold bind9 and got this output:
bind9 was already not on hold.
However, I can see in the “Software Update” page’s logs that these packages are supposedly held back:
2025-08-21 23:31:56,772 INFO Package bind9 is kept back because a related package is kept back or due to local apt_preferences(5).
2025-08-21 23:31:56,786 INFO Package bind9-dnsutils is kept back because a related package is kept back or due to local apt_preferences(5).
2025-08-21 23:31:56,798 INFO Package bind9-host is kept back because a related package is kept back or due to local apt_preferences(5).
2025-08-21 23:31:56,812 INFO Package bind9-libs is kept back because a related package is kept back or due to local apt_preferences(5).
2025-08-21 23:31:56,825 INFO Package bind9-utils is kept back because a related package is kept back or due to local apt_preferences(5).
2025-08-21 23:31:57,038 INFO Package exim4-base is kept back because a related package is kept back or due to local apt_preferences(5).
2025-08-21 23:31:57,053 INFO Package exim4-daemon-light is kept back because a related package is kept back or due to local apt_preferences(5).
2025-08-21 23:31:57,375 INFO Package highlight is kept back because a related package is kept back or due to local apt_preferences(5).
2025-08-21 23:31:57,389 INFO Package highlight-common is kept back because a related package is kept back or due to local apt_preferences(5).
2025-08-21 23:31:58,160 INFO Package libgl1-mesa-dri is kept back because a related package is kept back or due to local apt_preferences(5).
Can I manually trigger the upgrade of the supposedly held back packages from the command line so that I can answer the prompts?
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 22399 (apt-get)
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 22399 (apt-get)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
bind9 : Depends: adduser but it is not going to be installed
Depends: iproute2 but it is not going to be installed
login : PreDepends: libpam-runtime but it is not going to be installed
PreDepends: libpam-modules but it is not going to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
apt : Depends: libgnutls30 (>= 3.7.5) but it is not going to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
deb tor+http://deb.debian.org/debian stable main
deb-src tor+http://deb.debian.org/debian stable main
deb tor+http://deb.debian.org/debian stable-updates main
deb-src tor+http://deb.debian.org/debian stable-updates main
deb tor+http://security.debian.org/debian-security/ stable-security main
deb-src tor+http://security.debian.org/debian-security/ stable-security main
# This file is managed by FreedomBox, do not edit.
# Allow carefully selected updates to 'freedombox' from backports.
deb tor+http://deb.debian.org/debian bookworm-backports main
deb-src tor+http://deb.debian.org/debian bookworm-backports main
Okay, the sources.list has “stable” as distribution. That means as soon as Trixie got release, “stable” pointed to “Trixie” instead of “Bookworm”. And now there are some packages from Bookworm and some from “Trixie”. Was this official FreedomBox image or from Debian installer? What hardware is this?
Now, to recover from this, first take a backup of all the apps in FreedomBox. Also take an SD card copy. Then try manually:
apt full-upgrade
This will likely fail. Then try to installing just the problematic packages (and their dependencies with just one apt-get command) until full-upgrade succeeds. If all else fails, I guess the best thing to do is a fresh installation.
Hardware is Pioneer Edition FreedomBox and the image is the Pioneer image taken from the FreedomBox website.
I purposefully keep this FreedomBox as vanilla as possible so that it stays predictable for all the scripting. I let FreedomBox take care of all updates and never trigger them manually (except just now for this testing).
I’ll get to backing up then. Thank you for your help!