Skip to content

Commit 0e66c6d

Browse files
authored
Merge pull request #68 from Aethersailor/fix-1
fix: 修复内核清理漏检 proxmox-kernel signed 包
2 parents 05c4ad0 + 115f8f0 commit 0e66c6d

1 file changed

Lines changed: 21 additions & 6 deletions

File tree

PVE-Tools.sh

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -864,6 +864,18 @@ pve_mail_notification_setup() {
864864
return 0
865865
}
866866

867+
# 获取已安装的 PVE 内核包(兼容 pve-kernel / proxmox-kernel 以及 -signed 后缀)
868+
get_installed_kernel_packages() {
869+
local status_regex="${1:-ii|hi}"
870+
871+
dpkg -l 2>/dev/null | awk -v sr="$status_regex" '
872+
$1 ~ ("^(" sr ")$") &&
873+
$2 ~ /^(pve-kernel|proxmox-kernel)-[0-9].*-pve(-signed)?$/ {
874+
print $2
875+
}
876+
' | sort -Vu
877+
}
878+
867879
# 检测当前内核版本
868880
check_kernel_version() {
869881
log_info "检测当前内核信息..."
@@ -888,7 +900,7 @@ check_kernel_version() {
888900
echo -e " 类型: ${GREEN}$kernel_variant${NC}"
889901

890902
# 检测可用的内核版本
891-
local installed_kernels=$(dpkg -l | grep -E 'pve-kernel|linux-image' | grep -E 'ii|hi' | awk '{print $2}' | sort -V)
903+
local installed_kernels=$(get_installed_kernel_packages)
892904
if [[ -n "$installed_kernels" ]]; then
893905
echo -e "${CYAN}已安装的内核版本:${NC}"
894906
while IFS= read -r kernel; do
@@ -1082,8 +1094,11 @@ remove_old_kernels() {
10821094
log_info "清理旧内核..."
10831095

10841096
# 获取所有已安装的内核
1085-
local installed_kernels=$(dpkg -l | grep -E '^ii.*pve-kernel' | awk '{print $2}' | sort -V)
1086-
local kernel_count=$(echo "$installed_kernels" | wc -l)
1097+
local installed_kernels
1098+
installed_kernels="$(get_installed_kernel_packages "ii")"
1099+
local -a kernel_list
1100+
mapfile -t kernel_list < <(printf '%s\n' "$installed_kernels" | sed '/^$/d')
1101+
local kernel_count=${#kernel_list[@]}
10871102

10881103
if [[ $kernel_count -le 2 ]]; then
10891104
log_info "当前只有 $kernel_count 个内核,无需清理"
@@ -1097,7 +1112,7 @@ remove_old_kernels() {
10971112
echo -e "${YELLOW}将删除 $remove_count 个旧内核,保留最新的 $keep_count 个内核${NC}"
10981113

10991114
# 获取要删除的内核列表(最旧的几个)
1100-
local kernels_to_remove=$(echo "$installed_kernels" | head -n $remove_count)
1115+
local kernels_to_remove=("${kernel_list[@]:0:$remove_count}")
11011116

11021117
read -p "是否继续?(y/N): " confirm
11031118
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
@@ -1106,14 +1121,14 @@ remove_old_kernels() {
11061121
fi
11071122

11081123
# 删除旧内核
1109-
while IFS= read -r kernel; do
1124+
for kernel in "${kernels_to_remove[@]}"; do
11101125
log_info "正在删除内核: $kernel"
11111126
if apt-get remove -y --purge "$kernel"; then
11121127
log_success "内核 $kernel 删除成功"
11131128
else
11141129
log_error "删除内核 $kernel 失败"
11151130
fi
1116-
done <<< "$kernels_to_remove"
1131+
done
11171132

11181133
# 更新引导配置
11191134
update_grub_config

0 commit comments

Comments
 (0)