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.