Зависимости

Доброго времени суток.
Как узнать какие пакеты в системе без зависимостей?

Это как? Ты

Это как? Ты имеешь ввиду недостяющие зависимости или что?

один из самых

один из самых простых методов:
1. нам понадобиться два списка первый- ls -RF -I eclass -I profile -I metadata-cache -I files /usr/portage | egrep '^(\/)' | awk -F\/ '{print $4"/"$5} ' | awk -F: '{print $1}' | egrep -v '(/)$' | egrep '(/)' > pkgspeclist.txt
синтаксис этого файла аналогичен world.
второй- для использования несколько другого метода - ls -R /var/db/pkg | egrep '^(\/)' | awk -F\/ '{print $5"/"$6} ' | awk -F: '{print $1}' | egrep -v '(/)$' | egrep '(/)' > instpkgs.txt
2. проверить все строки первого списка с помошью команды equery depends -d
3. если Вы хотите узнать зависимость данной конкретной версии, то надо проверить второй список.

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

э...

а чем

equery list

не угодил?

тем что он

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

sorry

значит я не понял вопрос.
"equery list" без spec выдаёт список всех установленных пакетов,
а здесь нужен список установленных, но не имеющих зависимостей?

Именно! НО, list

Именно! НО, list вылдаёт список точных версий, например если от qt-3 кто-то зависит, а от qt-4 нет, то equery depends -d qt выдаст все зависиости а equery depends -d qt-4 ниодной.

А не проще emerge -p --depclean

А не проще emerge -p --depclean
Или я чего-то не догоняю?

Есть одна

Есть одна сложность:

man emerge
...
 emerge generates a list of packages which it expects to be installed by checking  the  system package list and the world file. It then compares that list to the list of packages which are actually installed; the differences are listed as unnecessary packages and then unmerged after a short timeout.
...

Ну так

Ну так правильно.

Цитата:
emerge generates a list of packages which it expects to be installed by checking the system package list and the world file.

Разве это не означает, что emerge генерит список всех пакетов из system и world и их зависимостей?

Если да, то все остальные пакеты - не что иное как некий мусор (т.е. пакеты от которых никто не зависит), оставшийся от предыдуших установок. Его то мы и удаляем из системы.

Или я так и не понял в чем фишка?

тут ничего не

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

P.S. expect -- ожидать, полагать, думать

Давай решим траблу.

Я финига не шарю в том как устроен и как работает portage.
Но я точно знаю, что без чистки системы мне жизнь не мила. :)

Предлагаю замутить прогу, которая чистит систему.
Если твой метод работает, давай его автоматизируем, чтобы одной коммандой все чистилось, а если не работает - будем искать решение траблы.

Согласен?

Основная

Основная проблема в том, что emerge не записывает информацию, какие пакеты точно нужны для функционирования определённого пакета и как они были установлены (тоесть и прямые и обратные зависимости ОДНОВРЕМЕННО). Без этой информации точно определить что этот пакет ненужен невозможно. Самый оптимальный результат -- найти пакеты без зависимостей(обратных) и сравнить их со списком emerge --depclean, то что есть и там и там -- предложить пользователю стереть. Повторить этот процесс нужное количество раз, и не забыть revdep-rebuild.

Обьясни плз

Обьясни плз, что такое прямые зависимости и что такое обратные.

Прямые это, надо полагать, зависимости указанные в ebuild. Так? А вот что такое обратные?

И вообще, можешь дать ссылку где об этом всем почитать можно?

Обратные --

Обратные -- пакеты которые зависят от данного.
Чтобы в этом разобраться нужно проанализировать, что Вы делаете чтобы узнать нужен пакет или нет.

Ссылки тут только gentoo.org и Ваш_Любимый_Поисковик

Что-то я не совсем понимаю...

Что-то я не совсем понимаю...

Зачем нужны какие-то записи от emerge и зачем напрягаться по поводу прямых зависимотей?

Достаточно делать так:
1)У меня есть список пакетов в system и world. Я беру и строю полный список всех прямых зависимостей.(я же это могу сделать? emerge --emptytree world)

2)Если пакет не попал в список - значит от него никто не зависит, т.е. обратных зависимостей нету. А так как он не попал и в world или system, значит и сам по себе он никому не нужен => удаляем.

3) Goto 1)пока не удалим все не нужные пакеты пакетов

Или в Gentoo бывает так, что пакет1 зависит от пакета2 и пакет2 зависит от пакета1? Если так бывает, тогда конечно фиг тут что сделаешь...

Quote:Или в Gentoo

Цитата:
Или в Gentoo бывает так, что пакет1 зависит от пакета2 и пакет2 зависит от пакета1

Такое в приципе возможно, и что самое интересное такое бывает (где то на форуме видел подобную проблему с блокировками).

На счёт Вашего алгоритма:
Приведу пример: Вы захотели удалить xorg-x11 со всеми зависимостями ;)
Т.е. как минимум к вашему алгоритму прибавляется
0) emerge --newuse --update --deep world

Или в

Цитата:
Цитата:
Или в Gentoo бывает так, что пакет1 зависит от пакета2 и пакет2 зависит от пакета1

Такое в приципе возможно, и что самое интересное такое бывает (где то на форуме видел подобную проблему с блокировками).

Если подумать, то это не так страшно... Надо построить дерево прямых зависимостей. И все ветки, что начинаются не из world удалить! Во! :)
Тогда даже одного прохода хватит.

А вот с use-флагами тут сложнее. Если я удалил xorg-x11, но забыл удалить kde, а после этого сделал emerge --newuse --update --deep world то emerge мне опять xorg-x11 поставит... Даже обидно как-то...

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

Ну раз уж Вы всё

Ну раз уж Вы всё обдумали, может быть напишите скриптик, а все остальные его протестируют?

Постараюсь.

Постараюсь. Через недельку где-то выкачу альфу. :)

ИМХО

Инструментов много. Это и emerge -pv --depclean, и equery c командами depends и depgraph, и qdepends. С зависимостями так же пытается бороться revdep-rebuild. Судя по всему разобраться в прямых и обратных зависимостях разработчикам не удалось (иначе нафига столько тузл). ИМхо достаточно нетриавиальная задачка. Поэтому попытки "почистить" систему нередко заканчиваются очеь жестко.

Список кандидатов можно получить командой emerge -pv --depclean
Дальше на свой страх и риск. Бесплатный совет - не удаляйте пакетов стоящих выше sys-apps/portage в списке emerge -pve system, а то восстанавлиать будет тяжко.

ЗЫ
Оставте систему в покое, глядишь и проживет подольше :)

Не наш метод

Цитата:
Оставте систему в покое, глядишь и проживет подольше :)

Не наш метод. С таким подходом к делу винду надо пользовать! :)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".