**Setup:** Jetson AGX Orin devkit, booting from NVMe, JetPack 6.2.1 (L4T R36.4.4), Ubuntu 22.04 desktop.
**Symptom:** A shutdown never completed (board stayed on, unresponsive). After that, every boot stops in the initrd:
```
Root device found: nvme0n1p1
ERROR: nvme0n1p1 not found
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
VDD_3V3_PCIE: disabling
VDD_12V_PCIE: disabling
```
Thankfully the SSD is fine: it reads OK over USB and SMART is clean, I did not lose any data.
**Cause**
1. GNOME Software (the Ubuntu “Software” app, via PackageKit) auto-downloaded ~700 updates, including the **L4T R36.4.7 BSP** (`nvidia-l4t-kernel`, `-kernel-oot-modules`, `-initrd`, `-bootloader`, …), and installed them as an *offline update* at shutdown.
2. Partway through, it reached `packagekit 1.2.5-2ubuntu3.1` (an Ubuntu 22.04 security update). That package’s preinst runs `deb-systemd-invoke stop packagekit-offline-update.service packagekit.service`, which **kills the update transaction itself**. The board hangs at shutdown forever, with ~300 packages unpacked but never configured. (Same bug as Debian #880712 / PackageKit GitHub #590. Debian fixed it with `–no-stop-on-upgrade`; Ubuntu 22.04 hasn’t.)
3. The new kernel and initrd files were already on disk, but `nv-update-initrd` (a dpkg trigger that runs at configure time) never ran. So `/boot/initrd` is the stock package initrd **without `nvme`, `nvme-core`, `pcie-tegra194` or `phy-tegra194-p2u`**, and the initrd can’t see the NVMe.
**To confirm:** mount the APP partition on another PC. If `zcat /boot/initrd | cpio -t | grep nvme.ko` prints nothing, you have this bug. The last entry in `/var/log/apt/history.log` will also have no `End-Date`.
**Fix (simplified)**
1. Put the NVMe on a Linux PC (I did it with a USB enclosure) and mount the APP partition as `$R`. Back up `$R/boot/initrd` first.
2. Rebuild the initrd the way `nv-update-initrd` does:
```
KVER=5.15.148-tegra; mkdir /tmp/ird && cd /tmp/ird
zcat $R/boot/initrd | sudo cpio -i
grep -E ‘^[^#]’ $R/etc/nv-update-initrd/list.d/modules | sed “s/<KERNEL_VERSION>/$KVER/g” |
while IFS=: read src dst; do sudo mkdir -p “.${dst%/*}”; sudo cp $R$src “.$dst”; done
find . | sudo cpio -H newc -o | gzip -9 -n | sudo tee $R/boot/initrd > /dev/null
```
3. Boot the Jetson and finish the interrupted upgrade **in a terminal**. Don’t use the Software app: it will kill itself again.
```
sudo dpkg --configure -a
sudo apt-get -f install
sudo apt-get install --reinstall packagekit
zcat /boot/initrd | cpio -t | grep -E ‘nvme.ko|pcie-tegra194.ko’ # must list both before rebooting
```
In our case the bootloader capsule update was never staged: `sudo nvbootctrl dump-slots-info` still shows 36.4.4.
**⚠️ Don’t let your Jetsons auto-update.** On anything that matters (robots, field units):
- Never leave “Install pending software updates” ticked at power-off, and don’t update through the Software app.
- `sudo apt purge gnome-software` (or at least `gsettings set org.gnome.software download-updates false`), then `sudo systemctl mask packagekit.service`.
- `sudo apt-mark hold $(dpkg -l ‘nvidia-l4t-*’ | awk ‘/^ii/{print $2}’)`
- Do L4T upgrades deliberately with `sudo apt` over SSH inside `tmux`, and check that `/boot/initrd` contains `nvme.ko` before rebooting.
Hope this saves you the hassle of reinstalling Jetpack from scratch.
Ps: Claude did all the fix (about 3 hours work total) and write up. Just copy paste this post to your Claude and it should be smart enough to figure out what to do.