You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
3.7 KiB
76 lines
3.7 KiB
#!/usr/bin/env bash
|
|
|
|
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
|