Предложения по 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