LINUX.ORG.RU

[debian] Как найти все пакеты, поставленные из unstable ветки?

 


0

1

Как просмотреть, сколько пакетов и какие пакеты были поставлены из каждой конкретной ветки? Репозитории всех веток, конечно, подключены. Тут должна пробегать какая-то проверка версий, как я догадываюсь, простым aptitude search не обойдешься?

★★★

а если unstable ветку отрезать, aptitude показывает какие версии новее тех, что в репах? я не знаю про aptitude точно, но pacman показывает..

Sonsee
()
Ответ на: комментарий от aho

Оно, конечно, показывает, но хотелось бы, чтобы потом эти данные можно было хоть как-то обработать, не вглядываясь в строчки на экране. Так что ищется решение с выдачей в плейнтексте

si0 ★★★
() автор топика
Ответ на: комментарий от Zubok

Это найдет все установленные пакеты, у которых хоть какая-то версия есть в анстейбл ветке, независимо от того, какая версия действительно установлена

si0 ★★★
() автор топика
Ответ на: комментарий от Zubok

Опцией -F вывести интересующие поля, опцией --disable-columns убрать формат столбцов по ширине (если нужно). Подсчет числа пакетов можно сделать так:

aptitude search ~Aunstable~i | wc -l

Zubok ★★★★★
()
Ответ на: комментарий от si0

Чо, чо? Не понял. Дай пример, не врубился.

Zubok ★★★★★
()
Ответ на: комментарий от si0

А, врубился. Надо подумать. Тебе нужно найти пакеты, которые реально были установлены из unstable, а не те, которые как бы там есть, но не установлены.

Zubok ★★★★★
()

Что-то такие паттерны не сзадавал ни разу, так что пока в порядке бреда:

aptitude search "?any-version(~Aunstable~i)"

Мне кажется, что такой паттерн найдет те пакеты, которые сейчас в репозитории unstable и установлены. Но, по-моему, он не воспримет те пакеты, которые когда-то давно были взяты из unstable и версия которых в unstable уже другая. Надо поиграться, но сейчас спать охота, уже не соображаю. :)

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

>aptitude search "?any-version(~Aunstable~i)"

Основной недостаток этого паттерна в том, что он найдет в довесок к тому, что нужно, установленные пакеты, версия которых совпадает в stable и unstable. Но это уже близко, спасибо

si0 ★★★
() автор топика
Ответ на: комментарий от si0

>Основной недостаток этого паттерна в том, что он найдет в довесок к тому, что нужно, установленные пакеты, версия которых совпадает в stable и unstable.

Хм, странно. А разве так получается? У меня просто нет таких ситуаций, проверить сразу так не могу, надо подключать рапозитории для проверки. Я на lenny-backports тестировал, а там всегда версии не совпадают с основными репозиториями stable, security и т. д. Я так понимаю, что ~Aunstable не должен дать сработать на пакетах, которые из stable.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok
# aptitude versions abs-guide
p   4.1-1                                              oldstable                       510 
i   6.2-1                                              stable,testing,unstable         995 

Вот такие пакеты попадают в выдачу того запроса, хотя и были поставлены из стабильной ветки

si0 ★★★
() автор топика
Ответ на: комментарий от si0

>Вот такие пакеты попадают в выдачу того запроса, хотя и были поставлены из стабильной ветки

Безобразие какое. Может быть, тогда для начала тупо исключить такие пакеты, считая, что они из stable ставились? При этом осознавать, что такое допущение не является верным.

Добавить ?not(~Astable) и ?not(~Atesting) в запрос. Но это криво, конечно.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

?not(~Astable) исключит все пакеты, которые просто есть в стейбле, т.е. даже те, версия которых из анстейбла установлена.

Казалось бы, должно сработать '?and(!?any-version(~Astable~i),?any-version(~Aunstable~i))' но оно выдает пустое множество

si0 ★★★
() автор топика
Ответ на: комментарий от si0

>?not(~Astable) исключит все пакеты, которые просто есть в стейбле, т.е. даже те, версия которых из анстейбла установлена.

Ну так я и пишу, что принять допущение, что если есть пакет, который (i) установлен и (ii) имеет одинаковые версии и в stable, и в unstable, то считать его установленным из stable и не выводить. Допущение ошибочное, но в «туда-сюда» допустимое.

aptitude search "?any-version(~Aunstable~i ?not(~Astable))"

Zubok ★★★★★
()
Ответ на: комментарий от si0

А так?

aptitude search "?any-version(?and(~Aunstable~i, ?not(~Astable)))"

Zubok ★★★★★
()
Ответ на: комментарий от si0

Просто странно. Я вот у себя тестирую этот запрос на lenny-backports и у меня непустое множество выдает.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Ну правильно, c бэкпортами-то версии нигде не совпадают, так что запросы

aptitude search "?any-version(~Asqueeze-backports~i ?not(~Astable))"
aptitude search "?any-version(~Asqueeze-backports~i)"
дадут одно и то же

si0 ★★★
() автор топика
Ответ на: комментарий от si0

Да, но почему у тебя вообще пустой? Ведь версии пакетов в unstable и stable совпадают, наверное, только у нескольких пакетов, но далеко не у всех же.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Видимо потому, что когда мы исключаем ?not(~Astable), исключаются все пакеты, хоть какая-то версия (не только установленная) которых есть в стейбле.

Тьфу, запутался уже. Что-то мне самому не нравится в фразе выше

si0 ★★★
() автор топика
Ответ на: комментарий от si0

>Видимо потому, что когда мы исключаем ?not(~Astable), исключаются все пакеты, хоть какая-то версия (не только установленная) которых есть в стейбле.

У меня все пакеты из lenny-backports имеют версии в stable, но только несовпадающие.

Может, narrow пройдет?

aptitude search "?narrow(~i, ?and(?not(~Astable), ~Aunstable))"

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

>aptitude search "?narrow(~i, ?and(?not(~Astable), ~Aunstable))"

Дает пустое множество.

aptitude search '?any-version(~Aunstable ~i) !?any-version(~Atesting ~i)'

Зато нашел вот что интересное: запрос выше дает более-менее похожий на правду список пакетов из анстейбла. Оно и логично, если у пакета установлена версия, совпадающая в сиде и тестинге - он исключается, и таким образом исключаются все пакеты, у которых версия совпадает в сиде, тестинге и стейбле.

Но это все равно не дает универсального решения поставленной задачи: искать таким же образом пакеты из тестинга неправильно - совпадение версии в стейбле и тестинге не подразумевает совпадение с версией в сиде.

si0 ★★★
() автор топика
Ответ на: комментарий от si0

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

si0 ★★★
() автор топика
Ответ на: комментарий от Zubok

>А тестинг тоже у тебя подключен? Его, наверное, тоже надо исключить.

Да, подключен

si0 ★★★
() автор топика
[sio@greylap] /home/sio/
# aptitude search 'rxvt-unicode ?any-version(~Astable~i)'
i   rxvt-unicode                          - RXVT-like terminal emulator with Unicode suppor


[sio@greylap] /home/sio/
# aptitude versions rxvt-unicode
p   9.05-1+lenny1                                      oldstable                       510 
p   9.07-2+b1                                          stable                          995 
i   9.11-1                                             testing,unstable                600 

Вот такая нехорошая ситуация. Либо я не понимаю принципа работы запроса any-version, либо аптитуда почему-то ошибочно считает, что версия установленного urxvt совпадает с версией в стейбле

si0 ★★★
() автор топика
Ответ на: комментарий от si0

Вот мне и кажется странным, почему у нас разные поведения.

Может, баг? Или поведение поменялось? Попробуй хотя бы для начала заменить все сокращенные записи на полные. Типа ?name(rxvt-unicode), ?installed и т. д. У меня oldstable сейчас еще, поэтому и aptitude еще оттуда.

Вот у меня пример. Есть bzr в stable и в lenny-backports. Установлен из backports.

$ apt-cache policy bzr
bzr:
  Установлен: 2.0.3-1~bpo50+1
  Кандидат: 2.0.3-1~bpo50+1
  Таблица версий:
 *** 2.0.3-1~bpo50+1 0
          1 http://backports.debian.org lenny-backports/main Packages
        100 /var/lib/dpkg/status
     1.5-1.1 0
        500 http://ftp.fi.debian.org lenny/main Packages

Смотрим выхлоп aptitude

$ aptitude search 'bzr ?any-version(~Astable~i)' 

дает пустое множество.

$ aptitude search 'bzr ?any-version(~Alenny-backports~i)' 
i   bzr                                              - easy to use distributed version control system            
i   bzr-doc                                          - easy to use distributed version control system (documentat

Интересно, а никак настройки в /etc/apt/preferences на это влиять не могут? У меня пакеты из lenny-backports без pinning. Я их осознанно вручную ставил aptitude -t lenny-backports bzr bzr-doc.

Zubok ★★★★★
()
Ответ на: комментарий от si0

Я понял в чем дело. Он имя архива по подстроке, сволочь, подставляет. stable и unstable имеют одну и ту же подстроку. Например, у меня срабатывает lenn, lenny, lenny-backport, back, backp, lenny-backports и т. д., а lenny1 уже нет.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

В этом случае, наверное, регексп надо ставить. ^unstable$

Спасибо, сам бы ни за что не додумался

si0 ★★★
() автор топика

[решено]

aptitude search '?any-version(?installed !?archive(^stable$) !?archive(testing) ?archive(unstable))'

Такой поисковый запрос найдет именно то, что описано в первом посте.

si0 ★★★
() автор топика
Ответ на: [решено] от si0

Спасибо, сам бы ни за что не додумался

А я бы сам не додумался. если бы случайно не написал lenny-backport вместо lenny-backports. :) А потом я для уточнения полез еще раз в документацию, чтобы уточнить именно про archive, а там:

  ?archive(archive), ~Aarchive
      Matches package versions which are available from an archive that matches
      the regular expression archive. For instance, ``?archive(testing)''
      matches any package available from the testing archive.

regular expression

Такой поисковый запрос найдет именно то, что описано в первом посте.

Возможно, что в новых aptitude есть какие-то еще способы более изящные. Мне не нравится категорически, что надо явно исключать каждый архив, который в списках источников указан. Пока не совсем ясно, как отличить, откуда поставлен пакет, если архивы содержат одну и ту же версию пакета. aptitude ориентируется в решении вопросов на версии пакетов на основе актуальных списков, полученных в последнем aptitude update. Если пакет ставился давно из unstable и не обновлялся долго и за это время в unstable появился уже новый, то я даже не знаю, как узнать, откуда он поставлен. Можно, конечно, отыскать при помощи aptitude этих сиротинушек, исключив все архивы.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Текущее состояния решения вполне удовлетворяет моим запросам. Искать, откуда поставлен устаревший пакет уж точно не стану :) А про совпадающие версии - для своей системы я их мысленно отношу к стейблу, а вообще, логично их по приоритетам раскидывать.

si0 ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.