#!/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 и которые отсутствуют find ${PATH_KERNEL} -maxdepth 2 -name "vmlinuz-*.*.*-*" -print | while read FIND_FILE; do [[ $(stat -c%s $(readlink -e ${FIND_FILE} 2>/dev/null)) != $(stat -c%s ${PATH_BOOT}/${FIND_FILE##*/} 2>/dev/null) ]] \ && install -CDm400 -o root -g root $(readlink -e ${FIND_FILE}) ${PATH_BOOT}/${FIND_FILE##*/} done find ${PATH_KERNEL} -maxdepth 2 -name "ublinux-*.*.*-*" -print | while read FIND_FILE; do [[ $(stat -c%s $(readlink -e ${FIND_FILE} 2>/dev/null)) != $(stat -c%s ${PATH_BOOT}/${FIND_FILE##*/} 2>/dev/null) ]] \ && install -CDm400 -o root -g root $(readlink -e ${FIND_FILE}) ${PATH_BOOT}/${FIND_FILE##*/} done find ${PATH_KERNEL} -maxdepth 2 -name "addon-*.*.*-*" -print | while read FIND_FILE; do [[ $(stat -c%s $(readlink -e ${FIND_FILE} 2>/dev/null)) != $(stat -c%s ${PATH_BOOT}/${FIND_FILE##*/} 2>/dev/null) ]] \ && install -CDm400 -o root -g root $(readlink -e ${FIND_FILE}) ${PATH_BOOT}/${FIND_FILE##*/} done } remove_oldkernel_from_boot(){ # Найти все файлы ядра "vmlinuz-*.*.*-*" и initramfs "ublinux-*.*.*-*" в ${PATH_BOOT}/boot и которые отсутствуют в /usr/modules/*/ удалить 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(){ # Сформировать меню выбора версии ядра FILE_LANG=${LANG%_*} FILE_BOOTMENU_KERNEL="/memory/data/from/0/boot/grub/ublinux/grub_${FILE_LANG}_settings_kernel.cfg" PATH_BOOT_KERNEL="/memory/layer-base/0" TXT_RETURN="Return"; TXT_SELECTKERNEL="Select kernel version" TXT_RU_RETURN="Возврат"; TXT_RU_SELECTKERNEL="Выбрать версию ядра" [[ ${FILE_LANG} == "ru" ]] && TXT_RETURN=${TXT_RU_RETURN} && TXT_SELECTKERNEL=${TXT_RU_SELECTKERNEL} [[ -d ${PATH_BOOT_KERNEL} ]] || return 0 [[ -f ${FILE_BOOTMENU_KERNEL} ]] && rm -f ${FILE_BOOTMENU_KERNEL} for VMLINUZ_FILES in ${PATH_BOOT_KERNEL}/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_KERNEL}/ublinux-${VMLINUZ_VER} ]]; then VMLINUZ_FILE="vmlinuz-\${VMLINUZ_VER}" UBLINUX_FILE="ublinux-\${VMLINUZ_VER}" [[ -f ${PATH_BOOT_KERNEL}/addon-${VMLINUZ_VER} ]] && ADDON_FILE="addon-\${VMLINUZ_VER}" || ADDON_FILE="" cat << EOF >> "${FILE_BOOTMENU_KERNEL}" menuentry "${TXT_SELECTKERNEL}: ${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 \${prefix}/ublinux/grub_${FILE_LANG}.cfg } EOF fi done cat << EOF >> "${FILE_BOOTMENU_KERNEL}" if [ -f \${prefix}/ublinux/grub_${FILE_LANG}.cfg ]; then menuentry "${TXT_RETURN}" --unrestricted { configfile \${prefix}/ublinux/grub_${FILE_LANG}.cfg } fi EOF } copy_newkernel_to_boot remove_oldkernel_from_boot exec_prepare_menu_kernel