Skip to content

Conversation

@MichaIng
Copy link
Owner

@MichaIng MichaIng commented Oct 12, 2025

v9.18

(2025-10-19)

New images

  • NanoPi R3S (LTS) | Support and images for the LTS and non-LTS variant of this FriendlyELEC SBC with Rockchip RK3566 and two Gbit Ethernet ports has been added. The LTS variant comes with an HDMI port, the non-LTS variant without. Kernel device tree and userland setup for the non-LTS variant is tailored for headless usage, hence be sure to use the correct image.
  • NanoPi R76S/M5 | Support and images for these two FriendlyELEC SBCs with the new Rockchip RK3576 SoC has been added.

New software

  • LazyLibrarian | This ebook and audiobook collection manager has been added to our software catalogue. It can server as a replacement for Readarr, which is not developed anymore. Many thanks to @JappeHallunken for implementing this software option: DietPi-Software | Add LazyLibrarian #7747

Enhancements

  • DietPi-Dashboard | A reworked version of the dashboard has been implemented, with better default security, fixed and more flexible frontend/backend node handling and maintainability. The look&feel and features are mostly the same, but under the hood a lot has changed. For now, on reinstall, the old dashboard is disabled but not removed, so one can switch by disabling the new services and enabling the old one. TLS is now enabled by default with auto-generated self-signed certificates. Frontend and backend are two dedicated services. Backends connect at port 5253 by default, while the web UI is accessible at port 5252 by default, like before. While security is generally better, the rework has not been battle-tested thoroughly, hence the general recommendations for such kind of admin interfaces apply especially in this case: Do not open any of the two ports to the Internet directly, use a firewall if there is no router/NAT in between, and use a VPN if remote access is required for some reason. Many thanks to @ravenclaw900 for the huge efforts of this major rework: refactor: major rework  nonnorm/DietPi-Dashboard#1100
  • DietPi-Drive_Manager/DietPi-FS_partition_resize | Support for Xen virtual block devices has been added, which follow the scheme /dev/xvd[a-z][1-9]. Many thanks to @jr551 for implementing this compatibility enhancement: Added xen hv drive support #7755
  • DietPi-Config | The SPI bootloader update option and method has been made more generic, to be shown whenever the installed U-Boot package provides a related function and any SPI storage device node exists. The function call has been adjusted to not fail if the function supports both: flashing via mtd-utils/flashcp to /dev/mtd0 as well as flashing via dd to the block device node /dev/mtdblock0. In some cases, the wrong device node was passed to the function. Many thanks to @mlanner for reporting this issue: Orange Pi 5 - Cannot boot from NVMe, dietpi-config results in "No SPI image chosen" #7761

Bug fixes

  • DietPi-FS_partition_resize | Resolved an issue where the first reboot could have resulted in a hanging system, requiring a power cycle. On systems with ext4 root filesystem but without filesystem journal, it is generated on first boot. If an initramfs is used and performs an fsck, it imports the journal from /.journal to a hidden inode 8. For some reason, it then fails to mount that filesystem, requiring another reboot where fsck regenerates the journal, after which everything works fine. To avoid this, right after our script generates the journal, it triggers a reboot with forced fsck. fsck then does not only import the journal from /.journal to a hidden inode 8, but repairs whichever quirk this causes immediately, so that mounting the roofs succeeds right away.
  • DietPi-AutoStart | Fixed a typo which prevents KMS/DRM from being enabled on Raspberry Pi Trixie systems if a LightDM-based autostart option is selected: LightDM login mask or automatic desktop login as non-root user. Many thanks to @TheRaven500 for reporting this issue: Debian Trixie | Upgrade script support thread #7644 (comment)
  • DietPi-LetsEncrypt | The OCSP toggle has been removed, since Let's Encrypt shut down their OCSP servers this summer. You may need to remove respective settings from your Apache (SSLUseStapling, SSLStaplingCache, and other directives starting with SSLStapling*) or Ginning config respectively. For details about why OCSP has been deprecated, see this article: https://letsencrypt.org/2024/12/05/ending-ocsp
  • DietPi-Software | GMediaRender: Resolved an issue on Debian Trixie and Forky images where the package from Debian was installed instead of our own, since there was an upstream release we missed, which changed the version string only. Many thanks to @eevan78 for reporting this issue: Enhancement of GMediaRender installation #7767

StephanStS and others added 30 commits September 21, 2025 22:44
dietpi-installer: enable first run expansion for container images as well. It is now needed for ext4 journal generation, and does not hurt anyway. Many containers won't be able to inform the kernel about partition changes, but some can depending on the level of sandboxing.

dietpi-trixie-upgrade: remove redundant block
* init

* simple test install for lazy librarian

* corrected software id

* correct user and download for lazy lib

* fix pip command

* add service for lazylibrarian

* fix permissions

* fix uninstall

* added lazylibrarian to dietpi-services

* changed pip install to G_EXEC_OUTPUT=1 bc pip install can take a while

* Update dietpi/dietpi-software

remove trailing space

Co-authored-by: MichaIng <[email protected]>

* Update dietpi-software

removed empty line

---------

Co-authored-by: MichaIng <[email protected]>
The option is gracefully ignored if the dir does not exist, but the warnings can cause confusion.
There is no Forky suite yet, hence we use the Trixie one. But its FFmpeg package depends on a library version not available on Forky. Hence use FFmpeg from Debian.
…ssing

We obtain the drive device node path in a failsafe way based on known schemes. If that does not exist, it is a container system that is sandboxed enough so that informing the (host) kernel about partition changes is impossible anyway. Skip expansion gracefully, but print a message. Container images need to be expanded from the host in most cases.

Previously, we shipped those images without resize service enabled. Now this is needed for ext3/4 journal generation, and it does not hurt where supported. But in simple systemd-nspawn startups do not mount through any block device.

dietpi-installer: detect needed filesystem packages based on mounted filesystems instead of based on attached ones. This is mostly done since blkid requires the block device node to be mounted into containers, while findmnt works. However, it makes sense in general: the installer does not unmount any filesystem, and dietpi-drive_manager installs missing packages automatically on mount.
Use patched resize script, mainly for container images, but it can be required as well if other images are on purpose booted as container.
raspberrypi.org => raspberrypi.com in some overlooked cases and some changed documentation links
Due to 64-bit time_t transition, PostgreSQL 15 is forcefully removed on dist-upgrade on 32-bit architecture: #7644 (comment)
…rootfs device node

in which case we assume the image was booted as container without block device access. The journal then needs to be created on the host, and can safely be skipped if this is a temporary image for testing or builds only.

dietpi-build: remove obsolete AlloGUI workaround
Applying the dist-upgrade immediately does not cause any direct issues, but can cause indirect ones: A larger number of deb packages is downloaded at once, which might fill the tmpfs in case the APT archive has been moved into one. Also package upgrade pre-processing on slower SBCs/drives can take a very long time. And if APT runs into errors, a larger number of packages are in an unconfigured state. It does not hurt to split the upgrade into two smaller chunks which can finish faster and have a higher success chance each.
Any other key is typed into the console. Enter or Return are needed to finish read input.
MichaIng and others added 27 commits October 14, 2025 21:44
since Poetry cannot make use of multiple sources properly. Either it uses PyPI only, or it uses piwheels only, no matter which priorities are used.
Generally it makes sense to exit scripts when triggering a reboot, else they continue to run until the init system kills it, which is usually not intended.

Furthermore, on first login, when started from dietpi-login, its STDOUT+STDERR are redirected to a log file on disk. If the rootfs is a network filesystem, this prevents it from being able to unmount, hanging the shutdown procedure.

Similarly, the login script itself should exit in these cases to avoid it looping to the next install stage if the init system takes long to initiate the shutdown procedure for some reason.
A reboot is strictly needed after adding a the filesytem journal, otherwise it is not practically used for this boot session. On reboot mount can then fail since the last metadata changes in the unused journal do not match those on disk. e2fsck fixes this, but in case only after a power cycle, if it was not triggered by another filesytem error, unclean shutdown, as part of regular fsck enforcement every 60 (default) mounts etc.
(or an unmounted fs). Since this means that additional writes are done after journal creation and hence a metadata mismatch, an fsck is strictly required to fix this. /forcefsck is ignored by initramfs-tools, fsck.mode=force via cmdline is way too complex (the many different methods and not even assured to add cmdline entries, the need to remove it afterwards), mark filesystem as dirty.
It is not requried to re-create the GPT backup partition table via gdisk. fdisk can deal with GPT partitions as well, re-creates the backup header automatically, if missing or damaged, and can be used as well to explicitly move it.
The dirty bit is somehow ignored in most cases. Also, fsck requires "-y" on first attempt, while on another run it re-generates the journal without "-y" for some reason. Hence we add fsck.repair=yes to cmdline by default from now on, there was a request for this anyway: https://dietpi.com/forum/t/24030

Update VisionFive 2 kernel build workflow, which is however still a WIP.

Some code alignments in dietpi-firstboot
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
/etc/bashrc.d would run as non-root user as well, is hence not assured to run at all and would require a root permissions check. postboot.d runs via systemd service instead, independant of any login.
since v13 requires Git 2.34.1 while Bullseye provides v2.30.2 only
The exclamation mark has the special event meaning even in double-quotes.
The problem with next mount after adding a journal exists only if the initramfs performs an fsck before mounting the rootfs. It migrates the temporary /.journal inode into the hidden inode 8, and for whatever reason, this causes a failing mount, which is solved only with a forced fsck with forced repair, otherwise requires another power cycle, before fsck fixes it without "-y".

If there is no initramfs (or it does not fsck), systemd-fsck runs instead, but it cannot migrate /.journal to the hidden inode 8, since the rootfs is (R/O) mounted already. It hence also does not cause the mount issue, no reboot and no forced fsck is needed. This is the reason this issue was not recognised before.

There is still a little benefit when performing the reboot regardless, since the journal is pratically not in use before. It needs to be freshly mounted to become active, the R/W-remount is not sufficient. But a reboot is anyway often needed after first run setup, so that should be fine, not slowing down first run setup.

Add changelog entry about the issue.
The hwclock command is not actually needed, i.e. util-linux-extra does not need to be installed. Instead of hiding (or reverting) the option if hwclock fails, hide it if the RTC device nodes it would use do not exist. This is the typical reason if fails. Also add info that fake-hwclock does not hurt if an RTC is present, since it never turns back the clock.
@MichaIng MichaIng marked this pull request as ready for review October 19, 2025 22:51
@MichaIng MichaIng merged commit 4b14e2c into master Oct 19, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Open Beta v9.18 | Please help testing and hardening our upcoming release

6 participants