%define running_kernel_ver $(uname -r)
%define modules_backup_loc /tmp/.%{running_kernel_ver}
%define running_kernel_modules_dir /lib/modules/%{running_kernel_ver}
# delete dead symlinks and empty dirs at top level only
# if running kernel is re-installed, remove the symlink
%define do_libmodules_housekeeping \
if [ -d "%{running_kernel_modules_dir}" ]; then \
find /lib/modules -mindepth 1 -maxdepth 1 -xtype l -delete \
find /lib/modules -mindepth 1 -maxdepth 1 -type d -empty -delete \
if [ "%{running_kernel_ver}" = "%{uname_r}" ] && [ -L "%{running_kernel_modules_dir}" ]; then \
rm -f %{running_kernel_modules_dir} \
fi \
fi \
%{nil}
%pre
%do_libmodules_housekeeping
if [ "%{running_kernel_ver}" = "%{uname_r}" ]; then
rm -rf %{modules_backup_loc}
fi
%postun
if [ ! -e /boot/photon.cfg ]; then
list="$(basename "$(ls -1 -tu /boot/linux-*.cfg 2>/dev/null | head -n1)")"
test -n "$list" && ln -sf "$list" /boot/photon.cfg
fi
if [ ! -s /boot/linux-%{uname_r}.cfg ]; then
rm -f %{_sharedstatedir}/rpm-state/initramfs/pending/%{uname_r} \
/boot/initrd.img-%{uname_r}
echo "initrd of kernel %{uname_r} removed" >&2
fi
if [ -d "%{modules_backup_loc}" ]; then
if [ ! -s /boot/linux-%{running_kernel_ver}.cfg ]; then
%do_libmodules_housekeeping
# if running kernel's modules dir doesn't exist
# create a symlink which points to backup dir
if [ ! -d "%{running_kernel_modules_dir}" ]; then
ln -sfn "%{modules_backup_loc}" "%{running_kernel_modules_dir}"
fi
else
rm -rf "%{modules_backup_loc}"
fi
fi
%filetriggerun -- /lib/modules/
%do_libmodules_housekeeping
if [ "%{running_kernel_ver}" = "%{uname_r}" ] && [ ! -d "%{modules_backup_loc}" ]; then
cp -pr "%{running_kernel_modules_dir}" "%{modules_backup_loc}"
fi