From d8b7847242fb986727c28a056a10fc9bd5f9259d Mon Sep 17 00:00:00 2001 From: Juan RP Date: Sun, 10 Jul 2011 13:02:46 +0200 Subject: [PATCH] base-files: added /sbin/vkpurge, to remove old kernels. --- srcpkgs/base-files/files/vkpurge.sh | 103 ++++++++++++++++++++++++++++ srcpkgs/base-files/template | 9 ++- 2 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 srcpkgs/base-files/files/vkpurge.sh diff --git a/srcpkgs/base-files/files/vkpurge.sh b/srcpkgs/base-files/files/vkpurge.sh new file mode 100644 index 0000000000..84658112cf --- /dev/null +++ b/srcpkgs/base-files/files/vkpurge.sh @@ -0,0 +1,103 @@ +#!/bin/sh +# +# A simple script to remove old kernel files/modules. +# Brought to you by yours truly Juan RP in the Public Domain. +# +: ${progname:=$(basename $0)} + +usage() +{ + cat <<_EOF +Usage: $progname [] + +Targets: + list Lists old installed kernels. + rm Remove kernel + +Example: + $ $progname list + $ $progname rm 2.6.39.2 +_EOF + exit 1 +} + +list_kernels() +{ + local k kpkg installed skip + + for k in /var/lib/initramfs-tools/*; do + kver=$(basename $k) + for kpkg in kernel kernel-snapshot; do + installed=$(xbps-uhelper -r / version $kpkg) + if [ -n "$installed" ]; then + if [ "$installed" = "$kver" ]; then + skip=1 + break + fi + fi + done + if [ -n "$skip" ]; then + unset skip + continue + fi + echo "$kver" + done +} + +run_hooks() +{ + local dir="$1" + local kver="$2" + local d + + for d in /etc/kernel.d/${dir}/*; do + [ ! -x "$d" ] && continue + echo "Running ${dir} kernel hook: $(basename $d)..." + $d kernel $kver + done +} + +remove_kernel() +{ + local rmkver="$1" + local installed f kfile + + if [ ! -f /boot/vmlinuz-${rmkver} -a ! -d /lib/modules/${rmkver} ]; then + echo "Kernel ${rmkver} not installed." + exit 0 + fi + + installed=$(xbps-uhelper -r / version $rmkver) + if [ -n "$installed" ]; then + echo "Kernel $rmkver is currently installed." + exit 0 + fi + + # Execute pre-remove kernel hooks. + run_hooks pre-remove $rmkver + # Remove kernel files in /boot. + for f in config System.map vmlinuz; do + kfile="/boot/${f}-${rmkver}" + [ ! -f "${kfile}" ] && continue + echo "Removing ${kfile}..." + rm -f ${kfile} + done + # Remove kernel modules + if [ -d "/lib/modules/${rmkver}" ]; then + echo "Removing /lib/modules/${rmkver}..." + rm -rf /lib/modules/${rmkver} + fi + # Execute post-remove kernel hooks. + run_hooks post-remove $rmkver +} + +if [ "$1" = "list" ]; then + list_kernels +elif [ "$1" = "rm" ]; then + [ -z "$2" ] && usage + remove_kernel "$2" +else + usage +fi + +exit 0 diff --git a/srcpkgs/base-files/template b/srcpkgs/base-files/template index 12adde5a2a..a3ee65c9fb 100644 --- a/srcpkgs/base-files/template +++ b/srcpkgs/base-files/template @@ -1,10 +1,10 @@ # Template file for 'base-files' pkgname=base-files -version=0.43 +version=0.44 build_style=custom-install -short_desc="Vanilla Base System files" +short_desc="Vanilla GNU/Linux base system files" maintainer="Juan RP " -homepage="http://code.google.com/p/xbps" +homepage="https://vanilla.github.com/" license="public domain" long_desc=" This package installs the base system files that aren't installed by any @@ -57,4 +57,7 @@ do_install() # install -d ${DESTDIR}/usr/share/licenses install -m644 ${FILESDIR}/licenses/* ${DESTDIR}/usr/share/licenses + + # vkpurge + vinstall ${FILESDIR}/vkpurge.sh 755 sbin vkpurge }