#!/usr/bin/env bash # # Author: Dmitry Razumov # Copyright (c) 2021-2025 UBLinux # ENABLED=yes [[ ${ENABLED} == "yes" ]] || exit 0 PATH_BOOT="/memory/layer-base/0" PATH_KERNEL="/usr/lib/modules" copy_newkernel_to_boot(){ # Найти все файлы ядра и initramfs. Еслии новее по дате модификации в системе, то заменить загрузочные mountpoint --quiet "${PATH_BOOT}" || return 0 find ${PATH_KERNEL} -maxdepth 2 \( -name "vmlinuz-*.*.*-*" -o -name "ublinux-*.*.*-*" -o -name "addon-*.*.*-*" \) -print | while read FIND_FILE; do local DTIME_FIND_FILE=$(stat -c'%Y' $(readlink -e ${FIND_FILE} 2>/dev/null)) [[ -e ${PATH_BOOT}/${FIND_FILE##*/} ]] && local DTIME_BOOT_FILE=$(stat -c'%Y' ${PATH_BOOT}/${FIND_FILE##*/} 2>/dev/null) || local DTIME_BOOT_FILE=0 [[ ${DTIME_FIND_FILE} =~ ^[0-9]+$ && ${DTIME_BOOT_FILE} =~ ^[0-9]+$ ]] && [[ ${DTIME_FIND_FILE} -gt ${DTIME_BOOT_FILE} ]] \ && cp -aL "${FIND_FILE}" "${PATH_BOOT}/" && chown root:root "${PATH_BOOT}/${FIND_FILE##*/}" && chmod 400 "${PATH_BOOT}/${FIND_FILE##*/}" done } remove_oldkernel_from_boot(){ # Найти все файлы ядра "vmlinuz-*.*.*-*" и initramfs "ublinux-*.*.*-*" в ${PATH_BOOT}/boot и которые отсутствуют в /usr/modules/*/ удалить mountpoint --quiet "${PATH_BOOT}" || return 0 find ${PATH_BOOT} -maxdepth 1 -name "vmlinuz-*.*.*-*" -exec bash -c "find ${PATH_KERNEL} -maxdepth 2 -name \${1##*/} -exec false \{\} + && rm -f \$1" bash {} \; find ${PATH_BOOT} -maxdepth 1 -name "ublinux-*.*.*-*" -exec bash -c "find ${PATH_KERNEL} -maxdepth 2 -name \${1##*/} -exec false \{\} + && rm -f \$1" bash {} \; } exec_prepare_menu_kernel(){ # Сформировать меню выбора версии ядра mountpoint --quiet "${PATH_BOOT}" || return 0 FILE_BOOTMENU_KERNEL="/memory/data/from/0/boot/grub/ublinux/grub_settings_kernel.cfg" local DATA_BOOTMENU_KERNEL= for VMLINUZ_FILES in ${PATH_BOOT}/vmlinuz-*; do [[ -f "${VMLINUZ_FILES}" ]] || continue [[ ${VMLINUZ_FILES} =~ .*\/vmlinuz\-([0-9]+\.[0-9]+\.[a-z0-9_]+\-[0-9]+)$ ]] VMLINUZ_VER=${BASH_REMATCH[1]} if [[ -n ${VMLINUZ_VER} && -f ${PATH_BOOT}/ublinux-${VMLINUZ_VER} ]]; then VMLINUZ_FILE="\${PATH_DISTR_BOOT}/vmlinuz-\${VMLINUZ_VER}" UBLINUX_FILE="\${PATH_DISTR_BOOT}/ublinux-\${VMLINUZ_VER}" [[ -f ${PATH_BOOT}/addon-${VMLINUZ_VER} ]] && ADDON_FILE="\${PATH_DISTR_BOOT}/addon-\${VMLINUZ_VER}" || ADDON_FILE="" DATA_BOOTMENU_KERNEL+=\ " menuentry \$\"Change the kernel version\"\": ${VMLINUZ_VER}\" --unrestricted { VMLINUZ_VER=\"${VMLINUZ_VER}\" VMLINUZ_FILE=\"${VMLINUZ_FILE}\" UBLINUX_FILE=\"${UBLINUX_FILE}\" ADDON_FILE=\"${ADDON_FILE}\" export VMLINUZ_VER export VMLINUZ_FILE export UBLINUX_FILE export ADDON_FILE configfile \${PATH_DISTR_GRUB}/grub_main.cfg } " fi done if [[ -n ${DATA_BOOTMENU_KERNEL} ]]; then DATA_BOOTMENU_KERNEL+=\ " if [ -f \${PATH_DISTR_GRUB}/grub_main.cfg ]; then menuentry \$\"Return\" --unrestricted { configfile \${PATH_DISTR_GRUB}/grub_main.cfg } fi" [[ -f ${FILE_BOOTMENU_KERNEL} ]] && [[ "$(< ${FILE_BOOTMENU_KERNEL})" == "${DATA_BOOTMENU_KERNEL}" ]] || echo "${DATA_BOOTMENU_KERNEL}" > "${FILE_BOOTMENU_KERNEL}" else [[ -f ${FILE_BOOTMENU_KERNEL} ]] && rm -f ${FILE_BOOTMENU_KERNEL} fi } copy_newkernel_to_boot remove_oldkernel_from_boot exec_prepare_menu_kernel