Linux

Mageia下如何用DNF輕鬆去除舊核心?

  • January 24, 2022

由於installonly_limit 3inetc/yum/yum.conf和 inetc/dnf/dnf.conf在 Mageia 下即使執行似乎也沒有任何效果dnf autoremove,我嘗試執行dnf remove $(dnf repoquery --installonly --latest-limit=-2)但由於抱怨無法刪除而失敗basesystem。實際上,dnf repoquery --installonly --latest-limit=-2似乎返回所有核心,包括最新核心,無論--latest-limit. 我錯過了什麼?我在這個文件中找到了這個命令行,它可以在其他一些支持 DNF 的發行版下工作,但不能在 Mageia 下工作。

dnf repoquery --installonly給我:

kernel-desktop-5.15.11-3.mga8-0:1-1.mga8.x86_64
kernel-desktop-5.15.15-1.mga8-0:1-1.mga8.x86_64
kernel-desktop-5.15.4-1.mga8-0:1-1.mga8.x86_64
kernel-desktop-5.15.6-2.mga8-0:1-1.mga8.x86_64

dnf remove --oldinstallonly --setopt installonly_limit=1告訴我沒有舊的 installonly 包要刪除。

由於我在使用 RPM 一段時間後使用 DNF,因此基於 DNF 的解決方案不起作用。

這是我使用 RPM 的解決方案,它只保留最近安裝的核心和目前使用的核心:

#!/bin/bash
# script written by Julien Gouesse, under General Public License version 2
if [ ! -n "$BASH" ]
 then echo "Please run $0 with bash"
      exit 1
fi
if [ "$EUID" -ne 0 ]
 then echo "Please run $0 as root"
      exit 2
fi
kernelType=$(uname -r | cut -f 2 -d "-")
kernelReleaseNumber=$(uname -r | cut -f 1 -d "-")
kernelPatchLevelAndDistro=$(uname -r | cut -f 3 -d "-")
currentlyLoadedKernelPackagePrefix="kernel-$kernelType-$kernelReleaseNumber-$kernelPatchLevelAndDistro"
latestKernelPackagePrefix="kernel-$kernelType-latest-"
mostRecentlyInstalledKernelVirtualPackagePrefix=$(rpm -qa|grep $latestKernelPackagePrefix)
mostRecentlyInstalledKernelPackagePrefix=${mostRecentlyInstalledKernelVirtualPackagePrefix/-latest/}
packagesToDeinstall=""
for i in $(rpm -qa|grep kernel-desktop-)
do
  if [[ "$i" != *"$currentlyLoadedKernelPackagePrefix"* ]] && [[ "$i" != *"$mostRecentlyInstalledKernelVirtualPackagePrefix"* ]] && [[ "$i" != *"$mostRecentlyInstalledKernelPackagePrefix"* ]]
    then
      packagesToDeinstall+=" $i"
  fi
done
if [ "$packagesToDeinstall" == "" ] 
 then
   echo "No kernel to deinstall"
 else
   urpme $packagesToDeinstall
fi

請記住,這是一個非常具體的解決方案,它在其他發行版下不起作用。

引用自:https://unix.stackexchange.com/questions/687044