Скрипт для исправления проблем в GRUB в 1 клик. Возможно применение в автоматизированных скриптах.
#!/bin/sh
load_default_grub() {
. /etc/default/grub
}
get_yes_no() {
while [ true ]; do
echo -n "$1 (Y/N) ? "
read a
echo
if [ $? != 0 ]; then
a='No'; return;
fi
case $a in
[Yy][Ee][Ss]|[Yy]) a='Yes'; return;;
[Nn][Oo]|[Nn]) a='No'; return;;
*) ;;
esac
done
}
# Load config and uncomment variable.
load_default_grub
if (grep -qwai '^#GRUB_DISABLE_RECOVERY=' /etc/default/grub >/dev/null); then
echo 'INFO: Uncomment the GRUB_DISABLE_RECOVERY variable.'
sed -i 's/^#GRUB_DISABLE_RECOVERY=\(.*\)/GRUB_DISABLE_RECOVERY=\1/' /etc/default/grub
fi
# Load config again, check value and set if need.
load_default_grub
if [ "$GRUB_DISABLE_RECOVERY" != 'true' ]; then
if [ -z "$GRUB_DISABLE_RECOVERY" ]; then
echo 'INFO: Add GRUB_DISABLE_RECOVERY="true"'
echo 'GRUB_DISABLE_RECOVERY="true"' >> /etc/default/grub
else
echo 'INFO: Set GRUB_DISABLE_RECOVERY to "true"'
sed -i 's/^GRUB_DISABLE_RECOVERY=.*/GRUB_DISABLE_RECOVERY="true"/' /etc/default/grub
fi
fi
# Delete deprecated options GRUB_HIDDEN_TIMEOUT*.
if (grep -qwai '^GRUB_HIDDEN_TIMEOUT.*' /etc/default/grub >/dev/null); then
echo 'INFO: Delete deprecated options GRUB_HIDDEN_TIMEOUT*'
sed -i '/^GRUB_HIDDEN_TIMEOUT.*/d' /etc/default/grub
fi
# Add option GRUB_RECORDFAIL_TIMEOUT=15 for automatic boot on fail.
if ! (grep -qwai '^GRUB_RECORDFAIL_TIMEOUT=.*' /etc/default/grub >/dev/null); then
echo 'INFO: Add option GRUB_RECORDFAIL_TIMEOUT=15 for automatic boot on fail.'
echo 'GRUB_RECORDFAIL_TIMEOUT=15' >> /etc/default/grub
fi
# GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
if (grep -qwai '^GRUB_CMDLINE_LINUX_DEFAULT=.*' /etc/default/grub >/dev/null); then
# Load config again, check value and set if need.
load_default_grub
for i in $GRUB_CMDLINE_LINUX_DEFAULT; do
case "$i" in
'splash') i='nosplash' ;;
'quiet') i='noquiet' ;;
esac
if [ -n "$GRUB_CMDLINE_LINUX_DEFAULT_OUT" -a -n "$i" ]; then
GRUB_CMDLINE_LINUX_DEFAULT_OUT="$GRUB_CMDLINE_LINUX_DEFAULT_OUT $i"
else
GRUB_CMDLINE_LINUX_DEFAULT_OUT="$i"
fi
done
sed -i -e "s/^GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT=\"$GRUB_CMDLINE_LINUX_DEFAULT_OUT\"/" /etc/default/grub
fi
# Finnaly re-generate grub.cfg.
get_yes_no "Do you want to run update-grub"
[ $a = 'Yes' ] && update-grub
Comments
comments powered by Disqus