Page 1 of 2 12 LastLast
Results 1 to 10 of 13

Thread: RPM : ближайшие пакеты

  1. #1
    Join Date
    Aug 2009
    Location
    Russia
    Posts
    2,247

    Default RPM : ближайшие пакеты

    Для всяких исследовательских целей наколхозил скрипт, который находит пакеты, установленные "рядом" с заданным (на основе идентификаторов транзакций пакетов). Думаю, может пригодится, особенно в каких-нибудь нештатных ситуациях, хе-хе.

    Code:
    #!/bin/bash
    if [ ! -e /tmp/tdb.txt ]
    then
        echo Updating list of TIDs
        rpm -qa --queryformat '%{INSTALLTID} %{name}\n' | sort > /tmp/tdb.txt
    fi
    tid=$(rpm -q --qf "%{INSTALLTID}" $1 | sed 's/.$//')
    echo Nearest
    cat /tmp/tdb.txt | grep $tid
    Есть идеи, что улучшить? Самому противно от перекрестных запросов к базе rpm((

    "Точность" поиска можно изменить в регулярке sed`а: сколько последних знаков отбрасывать в идентификаторе.

  2. #2
    Join Date
    Jun 2008
    Location
    Moscow, Russia
    Posts
    2,952
    Blog Entries
    1

    Default Re: RPM : ближайшие пакеты

    Не совсем понял, что это даёт.

    Технически, по скриптописанию, есть претензии:
    Code:
    #!/bin/bash
    исправить на
    Code:
    #!/bin/sh
    Сделать проверку на один (единственный) входящий аргумент.

    Code:
    cat /tmp/tdb.txt | grep $tid
    'cat' не нужен. 'grep' непосредственно файл.

    Code:
    if [ ! -e /tmp/tdb.txt ]
    Заменить на
    Code:
    if [ ! -f /tmp/tdb.txt ]
    Обозначить "exit" по ходу скрипта.

  3. #3
    Join Date
    Aug 2009
    Location
    Russia
    Posts
    2,247

    Default Re: RPM : ближайшие пакеты

    Не совсем понял, что это даёт.
    Захотелось "логичекой" группировки пакетов. Допустим что-то стало работать не так, и нужно целиком "откатить" последнее обновление/ установку пакетов. Как это сделать, учитывая, что даже в рамках этого обновления установленные пакеты имеют разные time ID? Только выборкой ближайших. Конечно, тем, кто не возится иногда с Factory или checkinstall такой функционал не очень нужен..

    Критику по стилю учту, спасибо.

  4. #4

    Default Re: RPM : ближайшие пакеты

    Quote Originally Posted by joneone View Post
    "Точность" поиска можно изменить в регулярке sed`а: сколько последних знаков отбрасывать в идентификаторе.
    Можно указать количество строк выводимых до и после искомого идентификатора транзакции (верно для ключа -C NUM; см. также ключи -A NUM -B NUM команды grep), добавив ещё один аргумент командной строки.
    Code:
    tid=$(rpm -q --qf "%{INSTALLTID}" $1)
    echo Nearest
    grep -C $2 $tid /tmp/tdb.txt

  5. #5
    Join Date
    Aug 2009
    Location
    Russia
    Posts
    2,247

    Default Re: RPM : ближайшие пакеты

    AndnoVember, количество строк до и после искомого ID заранее неизвестно. Но технически оно итак уже ограничено:
    TID- это время в UTC, секунды.

    Я специально не стал считать разницу между TID`ами арифметически, а использовал отбрасывание знаков с конца числа sed`ом: это значительно упрощает скрипт, а результат (вроде бы) тот же.

  6. #6
    Join Date
    Aug 2009
    Location
    Russia
    Posts
    2,247

    Default Re: RPM : ближайшие пакеты

    Хотя, как раз если считать, то можно ограничится только одним запросом к базе пакетов. Надо подумать, как быстрее и проще

    UPD
    не, второй запрос
    tid=$( ..
    не нужен вообще, достаточно grep

  7. #7

    Default Re: RPM : ближайшие пакеты

    Был такой вариант
    Code:
    #!/bin/sh
    rpm -qa --qf "%{installtid} %{name}\n" | sort | grep -B $2 -w $1
    exit 0

    , но работает не очень чисто, т.е. попадаются пакеты с похожим названием "с продолжение через дефис". Например conky и conky-cairo, conky-imlib2.
    Code:
    ~> ./test.sh conky 10
    1363368679 gsettings-desktop-schemas
    1363368680 gcr-data
    1363368682 gtk3-data
    1363368683 libgirepository-1_0-1
    1363368685 libdconf1
    1363368685 ypbind
    1363368686 polkit
    1363368688 obex-data-server
    1363368689 libtelepathy-glib0
    1363368689 libupower-glib1
    1363368690 conky
    --
    1370657380 libqt4-devel
    1370657384 libedataserver-1_2-17
    1370657385 evolution-data-server
    1370657388 evolution-data-server-lang
    1370771155 libopenal1-32bit
    1370773588 libstdc++33-32bit
    1370797468 kiwi-desc-oemboot
    1370868340 kiwi-desc-isoboot
    1370960174 cifs-utils
    1370961889 polkit-doc
    1371055387 conky-cairo
    1371055388 conky-imlib2

  8. #8
    Join Date
    Jun 2008
    Location
    Moscow, Russia
    Posts
    2,952
    Blog Entries
    1

    Default Re: RPM : =?UTF-8?B?0LHQu9C40LbQsNC50YjQuNC1INC/0LDQutC10YLRiw==?=

    AndnoVember wrote:

    > 1371055387 conky-cairo
    > 1371055388 conky-imlib2


    Надо бы в скрипт добавить перевод даты в читаемый формат:

    % date -d @1371055388
    Ср июн 12 20:43:08 MSK 2013


  9. #9
    Join Date
    Aug 2009
    Location
    Russia
    Posts
    2,247

    Default Re: RPM : ближайшие пакеты

    Спасибо за советы. От подобного скрипта в итоге я хотел бы получить вот что:
    1. вывод списка вида:
    > this_script.sh
    10 Марта 10:23 Установлено:
    Пакет_a Пакет_b ... Пакет_c

    16 Марта 11:50 Установлено:
    Пакет_p Пакет_q
    2. поиск:
    > this_script.sh Пакет_b
    10 Марта 10:23 Установлено:
    Пакет_a Пакет_b ... Пакет_c
    И все это сделать несложно, просто лень.. нет, не лень)) но может быть тут вообще выгоднее читать /var/log/zypp/history например?

  10. #10
    Join Date
    Aug 2010
    Location
    Russia
    Posts
    995

    Wink Re: RPM : ближайшие пакеты

    Quote Originally Posted by joneone View Post
    И все это сделать несложно, просто лень.. нет, не лень)) но может быть тут вообще выгоднее читать /var/log/zypp/history например?
    Естественно.
    Все функции вашего скрипта пока вполне решаемы элементарным grep'ом этого файла. Не говоря уже о том, что можно его терзать в графическом редакторе.

Page 1 of 2 12 LastLast

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •