Refactor apt simulation function for clarity

Updated the apt simulation function to clarify that it does not modify system APT sources and to streamline the temporary sources list handling.
This commit is contained in:
LINUXexpert.org
2026-01-22 14:16:15 -07:00
committed by GitHub
parent 0a678b7f7f
commit 5af853f871
+19 -29
View File
@@ -57,12 +57,14 @@ ON_ERROR_BACKUP_HINT=""
on_err() { on_err() {
local line="${1:-?}" code="${2:-?}" local line="${1:-?}" code="${2:-?}"
echo "${RED}FAILED${NC} at line ${line} (exit ${code})." >&2 echo "${RED}FAILED${NC} at line ${line} (exit ${code})." >&2
echo "Command: ${BASH_COMMAND}" >&2
if [[ -n "${ON_ERROR_BACKUP_HINT}" ]]; then if [[ -n "${ON_ERROR_BACKUP_HINT}" ]]; then
echo "Rollback hint: ${ON_ERROR_BACKUP_HINT}" >&2 echo "Rollback hint: ${ON_ERROR_BACKUP_HINT}" >&2
fi fi
echo "Log: ${LOG_FILE}" >&2 echo "Log: ${LOG_FILE}" >&2
exit "$code" exit "$code"
} }
trap 'on_err "$LINENO" "$?"' ERR trap 'on_err "$LINENO" "$?"' ERR
need_root() { [[ ${EUID:-$(id -u)} -eq 0 ]] || die "Run as root (use sudo)."; } need_root() { [[ ${EUID:-$(id -u)} -eq 0 ]] || die "Run as root (use sudo)."; }
@@ -408,14 +410,12 @@ timeshift_snapshot_best_effort() {
# --------------------------------------- # ---------------------------------------
apt_simulate_with_temp_sources() { apt_simulate_with_temp_sources() {
# Plan mode: simulate using a temporary APT environment. # Plan mode: simulate using a temporary APT environment.
# NOTE: This does not change system APT sources. It MAY install gnupg/dirmngr if missing, # This does NOT modify system APT sources.
# because we need to fetch and dearmor the Mint repo key for signed-by verification. # It keeps system trust/key config intact and only overrides the sources list + state/cache dirs.
local tmp local tmp
tmp="$(mktemp -d)" tmp="$(mktemp -d)"
mkdir -p \ mkdir -p \
"$tmp/etc/apt/sources.list.d" \
"$tmp/etc/apt/preferences.d" \
"$tmp/var/lib/apt/lists/partial" \ "$tmp/var/lib/apt/lists/partial" \
"$tmp/var/cache/apt/archives/partial" \ "$tmp/var/cache/apt/archives/partial" \
"$tmp/usr/share/keyrings" "$tmp/usr/share/keyrings"
@@ -426,7 +426,8 @@ apt_simulate_with_temp_sources() {
detect_ubuntu_mirrors detect_ubuntu_mirrors
cat > "$tmp/etc/apt/sources.list" <<EOF local sources="$tmp/sources.list"
cat > "$sources" <<EOF
deb [signed-by=${temp_keyring}] ${MINT_MIRROR%/} ${TARGET_MINT} main upstream import backport deb [signed-by=${temp_keyring}] ${MINT_MIRROR%/} ${TARGET_MINT} main upstream import backport
deb ${UBUNTU_ARCHIVE_MIRROR%/} ${UBUNTU_BASE} main restricted universe multiverse deb ${UBUNTU_ARCHIVE_MIRROR%/} ${UBUNTU_BASE} main restricted universe multiverse
deb ${UBUNTU_ARCHIVE_MIRROR%/} ${UBUNTU_BASE}-updates main restricted universe multiverse deb ${UBUNTU_ARCHIVE_MIRROR%/} ${UBUNTU_BASE}-updates main restricted universe multiverse
@@ -434,29 +435,6 @@ deb ${UBUNTU_ARCHIVE_MIRROR%/} ${UBUNTU_BASE}-backports main restricted universe
deb ${UBUNTU_SECURITY_MIRROR%/} ${UBUNTU_BASE}-security main restricted universe multiverse deb ${UBUNTU_SECURITY_MIRROR%/} ${UBUNTU_BASE}-security main restricted universe multiverse
EOF EOF
cat > "$tmp/etc/apt/preferences.d/50-linuxmint-conversion.pref" <<'EOF'
Package: *
Pin: origin "packages.linuxmint.com"
Pin-Priority: 100
Package: mint* mintsources* mintupdate* mintsystem* mintstick* mintmenu* mintlocale* mintdrivers* mintreport* mintwelcome*
Pin: origin "packages.linuxmint.com"
Pin-Priority: 700
Package: cinnamon* nemo* muffin* cjs* xapp* slick-greeter* lightdm* pix* xviewer* mint-themes* mint-y-icons* mint-x-icons*
Pin: origin "packages.linuxmint.com"
Pin-Priority: 700
EOF
info "Plan mode: apt update (temporary dirs)..."
apt-get \
-o Dir::Etc="$tmp/etc/apt" \
-o Dir::State="$tmp/var/lib/apt" \
-o Dir::Cache="$tmp/var/cache/apt" \
-o Dir::State::status="/var/lib/dpkg/status" \
-o Acquire::Retries=3 \
update
local recommends="--no-install-recommends" local recommends="--no-install-recommends"
[[ "$WITH_RECOMMENDS" == "yes" ]] && recommends="" [[ "$WITH_RECOMMENDS" == "yes" ]] && recommends=""
@@ -468,10 +446,21 @@ EOF
esac esac
pkgs+=(mint-meta-core mint-meta-codecs mintsystem mintupdate mintsources) pkgs+=(mint-meta-core mint-meta-codecs mintsystem mintupdate mintsources)
info "Plan mode: apt update (temporary state/cache + temporary sources list)..."
apt-get \
-o Dir::Etc::sourcelist="$sources" \
-o Dir::Etc::sourceparts="-" \
-o Dir::State="$tmp/var/lib/apt" \
-o Dir::Cache="$tmp/var/cache/apt" \
-o Dir::State::status="/var/lib/dpkg/status" \
-o Acquire::Retries=3 \
update
info "Plan mode: simulated install: ${pkgs[*]}" info "Plan mode: simulated install: ${pkgs[*]}"
local plan_log="$LOG_DIR/plan-$(date +%Y%m%d-%H%M%S).txt" local plan_log="$LOG_DIR/plan-$(date +%Y%m%d-%H%M%S).txt"
apt-get \ apt-get \
-o Dir::Etc="$tmp/etc/apt" \ -o Dir::Etc::sourcelist="$sources" \
-o Dir::Etc::sourceparts="-" \
-o Dir::State="$tmp/var/lib/apt" \ -o Dir::State="$tmp/var/lib/apt" \
-o Dir::Cache="$tmp/var/cache/apt" \ -o Dir::Cache="$tmp/var/cache/apt" \
-o Dir::State::status="/var/lib/dpkg/status" \ -o Dir::State::status="/var/lib/dpkg/status" \
@@ -482,6 +471,7 @@ EOF
ok "Plan completed. Review: $plan_log" ok "Plan completed. Review: $plan_log"
} }
parse_and_guard_apt_actions() { parse_and_guard_apt_actions() {
local sim_output_file="$1" local sim_output_file="$1"
[[ -r "$sim_output_file" ]] || die "Missing simulation output: $sim_output_file" [[ -r "$sim_output_file" ]] || die "Missing simulation output: $sim_output_file"