fix(install): resolve the 7-Zip package name per release

`apt install p7zip*` only still resolves on Debian 13 / Ubuntu 24.04+
because the renamed `7zip` package happens to declare `Provides: p7zip`.
That is an alias we don't control, so pick the real package name against
the freshly-updated lists instead: `7zip` where it exists, `p7zip-full`
otherwise. Match on a real package stanza rather than apt-cache's exit
status, which returns 0 with empty output for provided-only names.

Also in this path:
- apt -> apt-get for the scripted calls, so the "apt does not have a
  stable CLI interface" warning stops polluting the captured $result.
- drop a duplicated `pv` from the package list.
- move the package list below `apt-get update` so the 7-Zip probe reads
  current lists.

Debian 10 sysctl check now reads OS_TYPE/OS_VERSION from detectOS rather
than shelling out to lsb_release, which minimal images don't ship. This
also stops a non-Debian release numbered "10" from matching.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
librelad 2026-08-01 10:55:30 +01:00
parent f0d7106188
commit bdaec0c03b
2 changed files with 19 additions and 5 deletions

View File

@ -38,7 +38,10 @@ installDockerRootless()
installed_version=$(slirp4netns --version 2>/dev/null | head -n1 | awk '{print $3}')
isSuccessful "slirp4netns ${installed_version:-installed} is ready"
if [[ $(lsb_release -rs) == "10" ]]; then
# Debian 10 only. Use the values detectOS already resolved from /etc/os-release
# instead of shelling out to lsb_release, which isn't installed by default on
# minimal Ubuntu/Debian images (and would otherwise just error to stderr here).
if [[ "$OS_TYPE" == "Debian" && "$OS_VERSION" == "10" ]]; then
((menu_number++))
echo ""
echo "---- $menu_number. Updating the sysctl file for Updating Debian 10."

View File

@ -22,19 +22,30 @@ installDebianUbuntu()
fi
if checkIfOSUpdateShouldRun; then
installed_apps="apt install curl dialog pv wget git zip htop sqlite3 pv sshpass rsync acl apache2-utils inotify-tools jq p7zip*"
isNotice "Installing System Updates... this may take a while."
if [[ "$OS_TYPE" == "Debian" ]]; then
export DEBIAN_FRONTEND="noninteractive"
fi
local result; result=$(DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 $priv apt update -qq 2>&1 && DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 $priv apt install sudo -yqq 2>&1 && $priv apt-get autoclean 2>&1)
local result; result=$(DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 $priv apt-get update -qq 2>&1 && DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 $priv apt-get install sudo -yqq 2>&1 && $priv apt-get autoclean 2>&1)
checkSuccess "Updating System Operating system."
local result; result=$(DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 $priv apt update -qq 2>&1)
local result; result=$(DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 $priv apt-get update -qq 2>&1)
checkSuccess "Running application update"
# 7-Zip changed package name: Debian 13 and Ubuntu 24.04+ ship `7zip`, older
# releases ship `p7zip-full`. Resolve against the freshly-updated package
# lists rather than relying on a `p7zip*` glob — that only still matches on
# new releases because `7zip` happens to declare `Provides: p7zip`.
# Match on a real package stanza, not just apt-cache's exit status — it
# returns 0 with empty output for virtual/provided-only names.
local sevenzip="p7zip-full"
if apt-cache show 7zip 2>/dev/null | grep -q .; then
sevenzip="7zip"
fi
installed_apps="apt-get install curl dialog pv wget git zip htop sqlite3 sshpass rsync acl apache2-utils inotify-tools jq $sevenzip"
local result; result=$(DEBIAN_FRONTEND=noninteractive APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 $priv $installed_apps -yqq 2>&1)
checkSuccess "Installing system applications"
else