Внимание: в сизифе находится пакет update-kernel, возможно он более актуален чем представленный здесь скрипт
#!/bin/sh # Vitaly Lipatov <lav@etersoft.ru>, 2004 # при участии: А. Китайкин <cetus@newmail.ru>, 2005-2007 # Устанавливает самое новое ядро и/или # обновляет уже установленные модули до версии # для самого нового установленного ядра # По изначальному замыслу "самым новым" должно # оказаться единственное-не-установленное, только # что объявившееся в updates, ядро того же типа. # Жизнь оказалась многообразнее, поэтому # автоматический выбор нового ядра можно # уточнить параметрами, указав: # - версию ядра: alt10, 2.4.11, 2.6.12-alt11 etc # - тип ядра: std-up, om-smp etc. # Кроме того, таким образом для уже установленного # ядра можно просто обновить модули. # - флаг -y передается в apt-get непосредственно echo "Update kernel with modules: Vitaly Lipatov <lav@etersoft.ru>, 2004-2005" y= # Тип ядра (по умолчанию получаем из текущего запущенного) TYPECUR=`uname -r | cut -d "-" -f2,3` TYPESYS=$TYPECUR RELEASE=. IMAGES=`apt-cache pkgnames kernel-image | sed -e "s/kernel-image-//g" | sed -e "s/#.*$//" | sort | uniq` while [ -n "$1" ]; do if [ "$1" = "-y" ]; then y=-y elif echo $IMAGES | grep $1 &>/dev/null; then TYPESYS=$1 else RELEASE=$1 fi shift done # Право root SUDO=sudo if [ "$UID" == "0" ]; then SUDO= fi # Выбор нового ядра. Однако, внимание! # "Самым новым" может показаться "единственное-не- # установленное" (ранее удаленное из системы?) ядро # давно уже не самой свежей версии. # "Самым новым" может оказаться и какой-нибудь # alt6 при живом alt12. Или 2.6.9 вместо 2.6.87. # Повезет или нет, решают звезды, программа sort и # правильный намёк на версию ядра. # Установка ядра теперь делается с предупреждением. # И в любом случае -- со всеми модулями. # Итог: все обдумать, и можно пользоваться... echo Current kernel is `uname -r` echo "Try to select newest kernel image '$TYPESYS' type" LISTKER=`apt-cache pkgnames kernel-image-$TYPESYS | grep $RELEASE | grep "\#" | tail -n 1` if [ -z "$LISTKER" ]; then echo Kernel not found! exit fi echo "Try to install new kernel $LISTKER and update its modules? [y]/n" read case "$REPLY" in (n|no|N|No|NO|0) exit;; (*) ;; esac $SUDO apt-get install $LISTKER $y NEWESTKERNEL=`echo $LISTKER | sed -e "s/#/-/g"` # Выбор и доустановка модулей. При смене версии ядра состав # модулей может измениться. Раньше это приводило к завершению # операции. Теперь модули перебираются и обновляются по одному, # и большая часть их вероятно будет установлена. Увеличивается # время работы и количество выводимого на экран хлама, но зато # сокращается объем ручной работы над ошибками. INSTVER=`rpm -q $NEWESTKERNEL --queryformat "%{VERSION}-$TYPESYS-%{RELEASE}"` echo "Updates modules for kernel: $INSTVER ..." ALLMODULES=`apt-cache pkgnames kernel-modules | sed -e "s/kernel-modules-//g" | sed -e "s/-.*$//g" | sort | uniq | grep -v kernel` for i in $ALLMODULES; do PKGNAME=kernel-modules-$i if rpm -q $PKGNAME-$TYPECUR &>/dev/null; then echo kernel-modules-$i is installed, try updating... $SUDO apt-get install $PKGNAME-$INSTVER $y echo $? fi done