så backar du kernel version i Ubuntu
Skript: Ta bort Linux-kärna 7.0
Bakgrund
Det har visat sig att Broadcom-drivrutinerna som kan installeras i Ubuntu 24.04 kan få problem med Linux-kärna 7.0. Broadcoms nätverkskretsar är mycket vanliga i äldre MacBook- och HP-datorer.
Starta därför datorn med en äldre Linux-kärna, vanligtvis version 6.14, innan du använder skriptet.
Kontrollera vilken kärna datorn använder med:
uname -r
Resultatet får inte börja med 7.0 när skriptet körs.
Beskrivning
Skriptet är avsett för Ubuntu och Linux Mint. Det kontrollerar först vilken Linux-kärna datorn använder.
Om datorn fortfarande kör en kärna från version 7.0 avbryts skriptet. Datorn måste då startas om med en äldre kärna innan version 7.0 kan tas bort.
Skriptet söker efter installerade paket vars namn börjar med linux- och innehåller kärnversionen 7.0. Innan paketen avinstalleras genomförs en provkörning med APT.
Funktioner
- Kontrollerar att skriptet körs som root.
- Kontrollerar att operativsystemet är Ubuntu eller Linux Mint.
- Kontrollerar vilken Linux-kärna datorn använder.
- Avbryter om den aktiva kärnan är version 7.0.
- Kontrollerar att den aktiva kärnans fil finns i
/boot. - Söker efter installerade kärnpaket för version 7.0.
- Visar vilka paket som kommer att tas bort.
- Genomför en provkörning med APT.
- Kräver att användaren skriver
JA. - Uppdaterar GRUB efter borttagningen.
- Har stöd för provkörning och automatisk bekräftelse.
Skript
Spara följande som ta-bort-kernel-7.0.sh:
#!/usr/bin/env bash
# Tar bort installerade Ubuntu/Mint-kärnpaket för version 7.0.
# 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."
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"
Installation
Gör skriptet körbart:
chmod +x ta-bort-kernel-7.0.sh
Provkörning
Kontrollera först vad som skulle tas bort:
sudo ./ta-bort-kernel-7.0.sh --dry-run
Inga paket avinstalleras vid provkörningen.
Genomför borttagningen
Kör skriptet:
sudo ./ta-bort-kernel-7.0.sh
Skriv JA när skriptet frågar om paketen ska tas bort.
Automatisk bekräftelse
För att genomföra borttagningen utan en bekräftelsefråga:
sudo ./ta-bort-kernel-7.0.sh --yes
Hjälpskärm
Visa skriptets hjälptext:
./ta-bort-kernel-7.0.sh --help
Kontroll efter omstart
Starta om datorn och kontrollera vilken kärna som används:
uname -r
Resultatet ska inte börja med 7.0.
Sidslut
Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
Tack till Datorhjälp som har sponsrat Linux.se med webbhotell.