sossepack

Från Wiki.linux.se -Linux wikipedia på Svenska.
Version från den 12 augusti 2026 kl. 05.09 av Admin (diskussion | bidrag)
Hoppa till navigering Hoppa till sök
  1. !/usr/bin/env bash
  1. Tar bort installerade Ubuntu/Mint-kärnpaket för version 7.0.
  2. Skriptet avbryter om den körande kärnan är en 7.0-kärna.

set -Eeuo pipefail

readonly TARGET_VERSION="7.0" assume_yes=0 dry_run=0

usage() {

   cat <<'EOF'

Användning:

 sudo ./ta-bort-kernel-7.0.sh [--yes] [--dry-run]

Val:

 -y, --yes       Bekräfta borttagningen automatiskt.
 -n, --dry-run   Visa vad som skulle tas bort utan att ändra något.
 -h, --help      Visa denna hjälptext.

EOF }

die() {

   echo "FEL: $*" >&2
   exit 1

}

while (($# > 0)); do

   case "$1" in
       -y|--yes)
           assume_yes=1
           ;;
       -n|--dry-run)
           dry_run=1
           ;;
       -h|--help)
           usage
           exit 0
           ;;
       *)
           usage >&2
           die "Okänt argument: $1"
           ;;
   esac
   shift

done

((EUID == 0)) ||

   die "Skriptet måste köras som root, exempelvis med sudo."

for command_name in uname dpkg-query apt-get sort; do

   command -v "$command_name" >/dev/null 2>&1 ||
       die "Kommandot '$command_name' saknas."

done

-r /etc/os-release ||

   die "/etc/os-release kunde inte läsas."
  1. shellcheck disable=SC1091

source /etc/os-release

distribution="${ID:-okänd} ${ID_LIKE:-}"

if [[ "$distribution" != *ubuntu* &&

     "$distribution" != *linuxmint* ]]; then
   die "Skriptet är avsett för Ubuntu eller Linux Mint."

fi

running_kernel="$(uname -r)" echo "Körande kärna: $running_kernel"

if [[ "$running_kernel" =~ ^7[.]0([.-]|$) ]]; then

   die "Datorn kör fortfarande kärna $running_kernel. Starta om med en annan kärna först."

fi

if ! -e "/boot/vmlinuz-$running_kernel" ; then

   die "Filen /boot/vmlinuz-$running_kernel saknas. Ingen borttagning gjordes."

fi

packages=()

while IFS=$'\t' read -r package_name package_status; do

   "$package_status" == "installed"  || continue
   base_name="${package_name%%:*}"
   if [[ "$base_name" == linux-* &&
         "$base_name" =~ (^|-)7[.]0([.-]|$) ]]; then
       packages+=("$package_name")
   fi

done < <(

   dpkg-query -W \
       -f='${binary:Package}\t${db:Status-Status}\n' \
       2>/dev/null

)

if ((${#packages[@]} == 0)); then

   echo "Inga installerade kärnpaket för version 7.0 hittades."
   exit 0

fi

mapfile -t packages < <(

   printf '%s\n' "${packages[@]}" | sort -u

)

echo echo "Följande ${#packages[@]} paket hittades:" printf ' %s\n' "${packages[@]}" echo

echo "APT:s beräkning av hela borttagningen:" apt-get --simulate purge "${packages[@]}" echo

if ((dry_run)); then

   echo "Provkörningen är klar. Inga paket togs bort."
   exit 0

fi

if ((!assume_yes)); then

   -t 0  ||
       die "Ingen terminal hittades. Kör med --yes för automatisk bekräftelse."
   read -r -p "Skriv JA för att ta bort paketen: " answer
   "$answer" == "JA"  ||
       die "Avbrutet av användaren."

fi

echo "Tar bort kärnpaket för version 7.0 ..."

DEBIAN_FRONTEND=noninteractive \

   apt-get purge -y -- "${packages[@]}"

if command -v update-grub >/dev/null 2>&1; then

   echo "Uppdaterar GRUB-menyn ..."
   update-grub

else

   echo "VARNING: update-grub hittades inte." >&2

fi

echo echo "Klart. Datorn kör fortfarande kärna $running_kernel." echo "Kontrollera efter nästa omstart med: uname -r"