Зависимости
MKV 23 июня, 2006 - 10:51
Доброго времени суток.
Как узнать какие пакеты в системе без зависимостей?
»
- Для комментирования войдите или зарегистрируйтесь
Это как? Ты
Это как? Ты имеешь ввиду недостяющие зависимости или что?
один из самых
один из самых простых методов:
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 проверяет только один
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
Или я чего-то не догоняю?
Есть одна
Есть одна сложность:
Ну так
Ну так правильно.
Разве это не означает, что 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
Такое в приципе возможно, и что самое интересное такое бывает (где то на форуме видел подобную проблему с блокировками).
На счёт Вашего алгоритма:
Приведу пример: Вы захотели удалить xorg-x11 со всеми зависимостями ;)
Т.е. как минимум к вашему алгоритму прибавляется
0) emerge --newuse --update --deep world
Или в
Если подумать, то это не так страшно... Надо построить дерево прямых зависимостей. И все ветки, что начинаются не из 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, а то восстанавлиать будет тяжко.
ЗЫ
Оставте систему в покое, глядишь и проживет подольше :)
Не наш метод
Не наш метод. С таким подходом к делу винду надо пользовать! :)