From 3a2fc2a329d573364986e9359996646d46c478f6 Mon Sep 17 00:00:00 2001 From: rob thijssen Date: Mon, 27 Jul 2026 19:35:34 +0300 Subject: [PATCH] docs: record the clock trap, and confirm booting from internal storage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It boots from the internal drive with the stick removed — 18s to multi-user, no failed units. The first thing tried on it was `dnf install net-tools`, which failed with: Transaction failed: Rpm transaction failed. - systemd is needed by net-tools-2.0-0.77.20160912git.fc44.aarch64 systemd is obviously installed; the machine had just booted. The cause is the clock. This machine's RTC cannot be set at all — ioctl(RTC_SET_TIME) returns "No such device" — and reads 1970 every boot, so systemd advances it to its own build date. That is close enough to look plausible and early enough that rpm treats package signatures created after it as not yet valid, skips those headers outright, and reports the packages as absent: Signature created at Sat Jul 25 18:33:30 2026 invalid: signature is not alive error: rpmdbNextIterator: skipping h# 282 package systemd is not installed chrony was already added to base.pkgs for the drift; it turns out to be load bearing rather than a nicety, and it syncs within about five seconds of the network appearing. Documented, because the symptom points nowhere near the cause. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01XWRjNJMistCy6ngXH5aJLS --- README.md | 8 ++++++-- docs/install.md | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2a07a22..b1e9cee 100644 --- a/README.md +++ b/README.md @@ -133,9 +133,13 @@ Confirmed on hardware, from a USB stick: - The framebuffer console works (`simple-framebuffer`, 240x67) - The root filesystem mounts, systemd starts, and it reaches a login prompt - Networking works over a USB WiFi dongle, and sshd is reachable -- `build/install-to-disk.sh` copies it onto the internal UFS +- `build/install-to-disk.sh` copies it onto the internal UFS, and it boots from + there with the stick removed — 18s to multi-user, no failed units -Not yet confirmed: booting from the internal drive rather than USB. +The RTC cannot be set on this machine and reads 1970 at every boot, so `chrony` +is installed and corrects the clock once the network is up. Until it does, rpm +rejects package signatures dated after the (wrong) current time and reports +installed packages as missing — see [docs/install.md](docs/install.md). Onboard WiFi does not appear at all, and audio, sensors, video decode and accelerated graphics are all absent — every one of them waiting on the diff --git a/docs/install.md b/docs/install.md index a6d21b1..726a789 100644 --- a/docs/install.md +++ b/docs/install.md @@ -85,6 +85,45 @@ and a root partition; `mkfs.vfat` and `mkfs.ext4 -O `/etc/kernel/cmdline`, `root=UUID=` in `/boot/loader/entries/*.conf`, and the `--fs-uuid` in both `/boot/grub2/grub.cfg` and `EFI/fedora/grub.cfg`. +## The clock, and why dnf lies about missing packages + +This machine's RTC cannot be set — `hwclock --systohc` fails with +`ioctl(RTC_SET_TIME) to /dev/rtc0 to set the time failed: No such device` — and +it reads 1970 at every boot. systemd compensates by advancing the clock to its +own build date, which is close enough to look right and wrong enough to break +rpm. + +The symptom is baffling if you have not seen it before: + +``` +$ sudo dnf install net-tools +Transaction failed: Rpm transaction failed. + - systemd is needed by net-tools-2.0-0.77.20160912git.fc44.aarch64 +``` + +systemd is plainly installed — the machine booted. But with the clock behind +the package's signing date, rpm rejects the signature as *not yet valid*, skips +that header entirely, and concludes the package is absent: + +``` +Signature 85b4 created at Sat Jul 25 18:33:30 2026 invalid: signature is not alive + because: Not live until 2026-07-25T18:28:30Z +error: rpmdbNextIterator: skipping h# 282 +package systemd is not installed +``` + +`chrony` is installed and enabled, and fixes this within a few seconds of the +network coming up — check with `timedatectl`. The gap only matters if you run +`dnf` before that, or on a machine with no network yet. Set it by hand in that +case: + +```sh +sudo date -u -s "2026-07-27 16:33:00" +``` + +Any roughly-correct time will do; it only has to be later than the packages +were signed. + ## If it does not boot The kernel command line is the first thing to change. It lives in @@ -98,6 +137,7 @@ one boot by pressing **e**. | USB dies during boot | Add `modprobe.blacklist=qcom_q6v5_pas` | | Cannot find root filesystem | The initramfs is missing the UFS drivers — see `overlay/etc/dracut.conf.d/10-c630.conf` | | 90-second stall early in boot | Add `systemd.tpm2_wait=0` | +| `dnf` says a package that is obviously installed is missing | The clock is behind — see above | Adding `earlycon` and `ignore_loglevel` will tell you a great deal more about which of these it is.