MichaIng / DietPi

Lightweight justice for your single-board computer!
https://dietpi.com/
GNU General Public License v2.0
4.79k stars 494 forks source link

Dietpi-update fails to complete due to apt-key cannot create /dev/null #7152

Open psyburr opened 2 months ago

psyburr commented 2 months ago

Creating a bug report/issue

Required Information

Steps to reproduce

sudo dietpi-update

Expected behaviour

Successful update/patching from v9.2.1 to v9.6.1

Actual behaviour

/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied                              
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
E: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed                
Sub-process apt-key returned an error code (29)
Err:1 https://raspbian.mirror.constant.com/raspbian bookworm InRelease

Extra details

After the update fails, my shell prompt includes three lines of -bash: /dev/null: Permission denied with the only remedy being to restore using dietpi-backup.

I will admit I have quite a bit of additional software installed, including the starship shell prompt, that may be giving me this error. I have found that a manual sudo apt-get update/upgrade yields no issues, and other software installed via dietpi-softwate such as pihole has no issues updating.

MichaIng commented 2 months ago

Hmm, I faced a very similar issue some weeks ago. The /dev/null node was somehow replaced by an actual file, which of course breaks everything which tries to redirect output to it, and has no root permissions. Can you check this:

ls -l /dev/null
psyburr commented 2 months ago

I restored to my most recent backup and this was the result pre dietpi-update crw-rw-rw- 1 root root 1, 3 Jul 11 19:35 /dev/null

After the update crw-r--r-- 1 root root 1, 3 Jul 7 22:50 /dev/null

to the be clear, the update still fails to complete and it breaks apt completely, giving me the gpgv errors as mentioned in the initial report

MichaIng commented 2 months ago

Can you share the full update log:

cat /var/tmp/dietpi/logs/dietpi-update.log
psyburr commented 2 months ago
DietPi-Update
─────────────────────────────────────────────────────
 Phase: Applying pre-patches

[  OK  ] DietPi-Update | Downloading pre-patches
[  OK  ] DietPi-Update | Applying execute permission
[  OK  ] DietPi-Update | Successfully applied pre-patches

 DietPi-Update
─────────────────────────────────────────────────────
 Phase: Upgrading APT packages

[ INFO ] DietPi-Update | APT update, please wait...
Get:1 https://raspbian.mirror.constant.com/raspbian bookworm InRelease [15.0 kB]
Get:2 https://dietpi.com/apt bookworm InRelease [3525 B]
Get:3 https://dietpi.com/apt all InRelease [25.3 kB]
Get:4 https://raspbian.mirror.constant.com/raspbian bookworm/main armhf Packages [14.5 MB]
Get:5 https://archive.raspberrypi.com/debian bookworm InRelease [23.6 kB]
Get:6 https://dietpi.com/apt bookworm/main armhf Packages [2032 B]
Get:7 https://archive.raspberrypi.com/debian bookworm/main armhf Packages [419 kB]
Get:8 https://archive.raspberrypi.com/debian bookworm/main armhf Contents (deb) [3396 kB]
Fetched 18.4 MB in 13s (1460 kB/s)
Reading package lists...
[  OK  ] DietPi-Update | APT update
[ INFO ] DietPi-Update | APT upgrade, please wait...
Reading package lists...
Building dependency tree...
Reading state information...
Calculating upgrade...
The following packages will be upgraded:
  vaultwarden
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 11.5 MB of archives.
After this operation, 557 kB of additional disk space will be used.
Get:1 https://dietpi.com/apt bookworm/main armhf vaultwarden armhf 1.31.0-dietpi1 [11.5 MB]
Fetched 11.5 MB in 2s (5829 kB/s)
(Reading database ... 96414 files and directories currently installed.)
Preparing to unpack .../vaultwarden_1.31.0-dietpi1_armhf.deb ...
Unpacking vaultwarden (1.31.0-dietpi1) over (1.30.5-dietpi3) ...
Setting up vaultwarden (1.31.0-dietpi1) ...

Configuration file '/mnt/dietpi_userdata/vaultwarden/vaultwarden.env'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
 ==> Keeping old config file as default.
Configuring vaultwarden service user ...
usermod: no changes
Setting vaultwarden userdata owner ...
Configuring vaultwarden systemd service ...
[  OK  ] DietPi-Update | APT upgrade

 DietPi-Update
─────────────────────────────────────────────────────
 Phase: Installing new DietPi code

[  OK  ] DietPi-Update | Downloading update archive
[  OK  ] DietPi-Update | Unpacking update archive
[  OK  ] DietPi-Update | Removing unused files
[  OK  ] DietPi-Update | Hardening update archive mode
[  OK  ] DietPi-Update | Installing new DietPi scripts
[  OK  ] DietPi-Update | Installing new DietPi system files
[ SUB1 ] DietPi-Set_software > verify_dietpi.txt
[  OK  ] DietPi-Set_software | Downloading current dietpi.txt
[  OK  ] verify_dietpi.txt  | Completed
[  OK  ] DietPi-Update | sync
[  OK  ] DietPi-Update | systemctl daemon-reload

 DietPi-Update
─────────────────────────────────────────────────────
 Phase: Applying incremental patches

[ INFO ] DietPi-Update | Current version : v9.2.1
[ INFO ] DietPi-Update | Latest version  : v9.6.1
[ INFO ] DietPi-Patch | Patching to DietPi v9.3...
[ SUB2 ] DietPi-Set_software > apt-mirror (dietpi)
[  OK  ] DietPi-Set_software | eval echo 'deb https://dietpi.com/apt bookworm main rpi3' > /etc/apt/sources.list.d/dietpi.list
[  OK  ] DietPi-Set_software | eval echo 'deb https://dietpi.com/apt all rpi' >> /etc/apt/sources.list.d/dietpi.list
[  OK  ] apt-mirror dietpi | Completed
[ INFO ] DietPi-Patch | APT update, please wait...
Hit:1 https://dietpi.com/apt bookworm InRelease
Hit:2 https://raspbian.mirror.constant.com/raspbian bookworm InRelease
Hit:3 https://dietpi.com/apt all InRelease
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
E: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
Sub-process apt-key returned an error code (29)Err:1 https://dietpi.com/apt bookworm InRelease
  gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
Hit:4 https://archive.raspberrypi.com/debian bookworm InRelease
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
E: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
Sub-process apt-key returned an error code (29)Err:2 https://raspbian.mirror.constant.com/raspbian bookworm InRelease
  gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
E: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
Sub-process apt-key returned an error code (29)Err:3 https://dietpi.com/apt all InRelease
  gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
E: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
Sub-process apt-key returned an error code (29)Err:4 https://archive.raspberrypi.com/debian bookworm InRelease
  gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
Reading package lists...
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://dietpi.com/apt bookworm InRelease: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://raspbian.mirror.constant.com/raspbian bookworm InRelease: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://dietpi.com/apt all InRelease: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://archive.raspberrypi.com/debian bookworm InRelease: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
E: Failed to fetch https://raspbian.mirror.constant.com/raspbian/dists/bookworm/InRelease  gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
E: Failed to fetch https://dietpi.com/apt/dists/bookworm/InRelease  gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
E: Failed to fetch https://dietpi.com/apt/dists/all/InRelease  gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
E: Failed to fetch https://archive.raspberrypi.com/debian/dists/bookworm/InRelease  gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
E: Some index files failed to download. They have been ignored, or old ones used instead.
[FAILED] DietPi-Patch | APT update
 - Command: apt-get -y -eany update
[FAILED] DietPi-Patch | Unable to continue, DietPi-Patch will now terminate.
[FAILED] DietPi-Update | An error occurred during incremental patching. Please check the above log or /var/tmp/dietpi/logs/dietpi-update.log for errors, and rerun "dietpi-update" after the cause has been solved.
MichaIng commented 2 months ago

Just to be sure, after restoring the backup, you ran dietpi-update just a single time and did not repeat it? Because I need to find the exact pre-patch, package upgrade or patch which caused this, but am unable to find the culprit so far.

We have a 2nd report: #7157 Weirdly, in this case, /dev/null was indeed replaced with a regular file, like it happened some time ago on my system as well, while in your case, it is still a node, just with wrong permissions.

This will re-create the node with the correct permissions:

sudo rm /dev/null
sudo mknod -m 0666 /dev/null c 1 3

Since it is a correct node in your case already:

sudo chmod 0666 /dev/null
MichaIng commented 2 months ago

I restored to my most recent backup and this was the result pre dietpi-update crw-rw-rw- 1 root root 1, 3 Jul 11 19:35 /dev/null

After the update crw-r--r-- 1 root root 1, 3 Jul 7 22:50 /dev/null

What I want to verify:

Because interesting is that the timestamp is now older: Jul 7 vs Jul 11. This would mean the /dev/null was not removed and re-created during the update, like because of a missing > redirect character when some file is removed, like

rm /path/to/file /dev/null

Such mistake would however result in a later/current timestamp. Means that e.g. a null file was accidentally contained in an archive and restored from there, preserving its timestamp, or just a file mved to /dev/null.

EDIT: Can you also show the services you have installed?

dietpi-services status
psyburr commented 2 months ago

yes, that is correct. i had restored to a working backup. i obtained the output of ls on /dev/null immediately after rebooting. i then attempted dietpi-update again to obtain the second output of ls.

[  OK  ] DietPi-Services | nmbd                 active (running) since Fri 2024-07-12 11:51:01 UTC; 1 day 11h ago
[  OK  ] DietPi-Services | smbd                 active (running) since Fri 2024-07-12 11:51:03 UTC; 1 day 11h ago
[  OK  ] DietPi-Services | php8.2-fpm           active (running) since Fri 2024-07-12 11:51:02 UTC; 1 day 11h ago
[  OK  ] DietPi-Services | apache2              active (running) since Sat 2024-07-13 03:15:45 UTC; 19h ago
[  OK  ] DietPi-Services | vaultwarden          active (running) since Fri 2024-07-12 11:50:58 UTC; 1 day 11h ago
[  OK  ] DietPi-Services | cron                 active (running) since Fri 2024-07-12 11:50:56 UTC; 1 day 11h ago
[  OK  ] DietPi-Services | ssh                  active (running) since Fri 2024-07-12 11:50:59 UTC; 1 day 11h ago
[  OK  ] DietPi-Services | pihole-FTL           active (running) since Fri 2024-07-12 11:50:58 UTC; 1 day 11h ago
[  OK  ] DietPi-Services | unbound              active (running) since Fri 2024-07-12 11:51:00 UTC; 1 day 11h ago
[  OK  ] DietPi-Services | fail2ban             active (running) since Fri 2024-07-12 11:50:58 UTC; 1 day 11h ago
[  OK  ] DietPi-Services | dietpi-ramlog        active (exited) since Fri 2024-07-12 11:50:57 UTC; 1 day 11h ago
[  OK  ] DietPi-Services | dietpi-preboot       active (exited) since Fri 2024-07-12 11:50:57 UTC; 1 day 11h ago
[  OK  ] DietPi-Services | dietpi-postboot      active (exited) since Fri 2024-07-12 11:50:57 UTC; 1 day 11h ago
[ INFO ] DietPi-Services | dietpi-wifi-monitor  inactive x⸑x

this all occurred while at work and unable to respond as i don't have regular access to any computer during those hours, thus it was done using my mobile and a detached tmux session so i may let things run in the background while i will more than likely lose my ssh connection. i appreciate your quick replies and help in the matter so far!

MichaIng commented 1 month ago

Let's go through some possible culprits:

ls -l /dev/null # check that it is still has right permissions
apt update
ls -l /dev/null
apt upgrade
ls -l /dev/null
dietpi-services restart
ls -l /dev/null