I wanted to setup my Wi-Fi hotspot (running Fedora 29 on a A20 Olimex Lime board) so it automatically updates itself every night.
DNF provides a way to run offline distro upgrades, from one version of Fedora to the next, but for routine upgrades within a Fedora release.
PackageKit has that, but I'm trying to keep this box as minimal as possible, so I was looking for a solution with just DNF.
Fortunately, someone had the same idea and submitted a plugin doing just that to DNF upstream.
Hoping this plugin would eventually be accepted upstream, I built my own Fedora packages with the plugin added.
Then I simply created a service:
# Saved as /etc/systemd/system/dnf-offline-upgrade.service [Unit] Description=Prepare for an offline update and run it After=NetworkManager-wait-online.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/bin/dnf offline-upgrade download -y --no-downgrade ExecStart=/usr/bin/dnf offline-upgrade reboot TimeoutSec=5min
And a timer:
# Saved as /etc/systemd/system/dnf-offline-upgrade.timer [Unit] Description=Daily system upgrade After=chrony-wait.service [Timer] OnCalendar=23:00:00 [Install] WantedBy=multi-user.target
All it takes at this point is to enable the timer:
$ sudo systemctl daemon-reload $ sudo systemctl enable dnf-offline-upgrade.timer $ sudo systemctl start dnf-offline-upgrade.timer
And that's it, from now on, every day at 11pm, DNF is going to perform an offline upgrade of the system:
# systemctl status dnf-offline-upgrade.timer ● dnf-offline-upgrade.timer - Daily system upgrade Loaded: loaded (/etc/systemd/system/dnf-offline-upgrade.timer; enabled; vendor preset: disabled) Active: active (waiting) since Thu 2018-11-22 18:10:35 CET; 1s ago Trigger: Thu 2018-11-22 23:00:00 CET; 4h 49min left Nov 22 18:10:35 localhost systemd: Started Daily system upgrade.
Hopefully the new DNF plugin will be merged upstream and included in a release soon, so I don't need my custom packages!