Предложения по update_kernel_modules.sh (was: Re: [Comm] скрипт обновления ядер/модулей)
php-coder
=?iso-8859-1?q?php-coder_=CE=C1_altlinux=2Eru?=
Вт Июн 7 17:34:01 MSD 2005
--- Michael Shigorin 2005-05-05 21:52:18 +0300
+++ php-coder 2005-05-26 18:50:44 +0700
MS> Пользуйтесь скриптом Виталика Липатова (прилагаю).
Пока им не пользовался (потому что ядро и два модуля могу и вручную
обновить), но вот просто к коду повнимательнее присмотрелся ;)
MS> # Тип ядра (получаем из текущего запущенного)
MS> TYPESYS=`uname -r | cut -d "-" -f2,3`
MS> test -z "$1" || TYPESYS=$1
Может быть так?
test -z "$1" || TYPESYS=`uname -r | cut -d- -f2,3`
_Для_универсальности_ не будет лишней также проверка на ванильное
ядро или самосборное...
MS> SUDO=sudo
MS> if [ "$UID" == "0" ]
MS> then
MS> SUDO=
MS> fi
Так тоже работает:
[ "$UID" != "0" ] && SUDO=sudo || SUDO=
MS> LISTKER=`$SUDO apt-get install kernel-image-$TYPESYS -y | grep "\#" | grep -v "\["`
MS> LISTKER=`echo $LISTKER | cut -d " " -f 1 | head -n 1`
Если я правильно понял цель к которой ведут эти две строчки чуть выше,
то, думаю, что можно это все записать намного короче:
LISTKER=`$SUDO apt-get install -y kernel-image-$TYPESYS | \
grep -e "^\ "`
Т.е. смысл в том, что пакет, который должен установиться всегда
находится в строке начинающейся с пробела. Других подобных строк я не
встретил.
MS> echo "Install new kernel $LISTKER"
MS> $SUDO apt-get install $LISTKER -y
хм... значит чуть выше ядро-то и не устанавливалось? В таком случае
может использовать ключ --simulate для этого?
(проглядывая man apt-get) Кстати, еще может быть полезны опция --quiet
К примеру, она опускает вывод индикаторов хода выполнения задачи.
Насколько, я понял вы для этого использовали grep -v "\["?
MS> ALLMODULES=`apt-cache pkgnames kernel-modules | sed -e "s/kernel-modules-//g" |\
MS> sed -e "s/-.*$//g" | sort | uniq | grep -v kernel`
Тут, кажется, есть ошибка. Не все модули обновляются :( К примеру, от
drm-via-2.6.10-wks26-up-alt5 и drm-vs-smp после "обрезания" останется
лишь drm. А потом, после uniq, останется лишь запись drm и установится
лишь drm. А что с drm-via? Я так понял, что ничего :(
Так вот сходу решения не нашел. Зато есть несколько идей:
- вместо прожорливого sed -e 's/kernel-modules-//g' можно использовать
cut: cud -c 16- Т.е. мы мерем все символы, начиная с шестнадцатого.
Вот доказательства ;)
sed -e "s/kernel-modules-//g" 0,03s user 0,00s system 1% cpu 1,707
total
cut -c 16- 0,00s user 0,01s system 0% cpu 1,708 total
Насколько, я понял cut быстрее..
- если уже использовать sed, то хотя бы записать это короче:
sed -e 's/kernel-modules-//g;s/-.*$//g'
- sort | uniq лучше заменить на sort -u (эффект тот же)
- вот еще идея! Зачем искать все возможные модули? Может лучше только
те, которые для используемого ядра? Тогда и меньше будет обрабатываемый
список:
[c0der на mycomp ~]$ apt-cache pkgnames kernel-modules WC
1304
[c0der на mycomp ~]$ apt-cache pkgnames G std-up WC
145
Т.е. искать модули содержащие в себе $TYPESYS
Это у меня предложение такое... :-)
Хотелось бы услышать мнение автора ;-) Поэтому даю ему, на всякий
случай, Сс:
Bye!
--
+ php-coder
+ php-coder[at]altlinux[dot]ru
Подробная информация о списке рассылки community