Понимание portage и параметров emerge

Несколько дней назад поставили даный дистрибутив и вот начал знакомиться с portage и утилитой emerge. Читал хэндбук и маны, но некоторые вопросы есть, а именно детального понимания. Вот, например, в emerge есть параметр --deep, я так понимаю, что при использовании emerge --update без даного параметра мы можем обновить пакет или world, но emerge проверит только версию пакета, но ни его зависимости. В хэндбуке: написано "Portage не будет тщательно проверять их зависимости", как это понять, значит какие-то зависимости он проверяет? В случае --deep проверяется полное дерево - "This flag forces emerge to consider the entire dependency tree of packages", а какой уровень проверяет emerge без deep? И в чем может быть выгода использования deep, если, например, emerge update без deep в случае новой версии потянет за собой обновления зависимостей?

Еще интересен вопрос параметра --emptytree (-e), в чем отличии даного параметра от --deep, выходит, что --emptytree отслеживает полное дерево зависимостей, а --deep до определенного уровня?

И последний вопрос касается --depclean. Пишут, что может снести нужные пакеты, как это может произойти и можно ли как-то застраховаться от этого.

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

Без '--deep' (-D) при

Без '--deep' (-D) при выполнении команды

emerge --update world

emerge проверит только наличие новых версий пакетов, которые находятся в списке wordl, т.е. находятся в файле /var/lib/portage/world. Если доступна новая версия пакета, указанного в world, то в случае, если для сборки новой версии пакета не нужно обновлять зависимости, требуемые для сборки этого пакета, то пакет будет собран с текущими версиями зависимостей, даже если есть более новые версии пакетов-зависимостей для обновляемого пакета. Если для сборки пакета требуется и обновление пакета-зависимости, то в этом случае в начале обновиться зависимость.

Если же вы указываете опцияю '--deep' (-D), то при обновлении пакетов из world в начале проверятся доступные обновления для пакетов-зависимостей, а уже затем произойдёт обновление пакетов в world.

Параметр '--emptytree' (-e) заставит пересобрать все пакеты-зависимости указанного и пакеты-зависимости зависимостей, иак до самого низа, будут пересобраны все пакеты, которые на каком-либо из уровней являются пакетами-зависимостями для указанного, даже если нет новых версий этих пакетов.

emerge man

Вот еще нашел в man про '--deep': "This flag forces emerge to consider the entire dependency tree of packages, instead of checking only the immediate dependencies of the packages. " Странно, с этого описания выходит, что emerge без '--deep' проверит "immediate dependencies". Выходит, что это зависимости первого уровня - зависимости пакета.

А с deep написно - "entire dependency tree of packages", тут выходит полное дерево зависимостей - зависимости зависимостей, но это противоречит '--emptytree'. Значит '--deep' проверяет до определенного уровня, но не ясно до какого.

Цитата: но это противоречит

Цитата:
но это противоречит '--emptytree'

Ничему это не противоречит. Ещё раз, '--emptytree' (-e) просто принудительно пересоберёт все пакеты которые вляются зависимостью указанного на каком-либо уровне указанного.

kostik87

kostik87 написал(а):
Цитата:
но это противоречит '--emptytree'

Ничему это не противоречит. Ещё раз, '--emptytree' (-e) просто принудительно пересоберёт все пакеты которые вляются зависимостью указанного на каком-либо уровне указанного.

Ага, точно, --emptytree - пересборка, не обратил внимания на это ключевое слово.
Значит --emptytree будет пересобирать до того момента, пока не закончатся зависимости зависимостей. Я так понимаю, что --emptytree удобно использовать при смене use флагов.

Но вот интересен вопрос уровней обновления '--deep'.

Вот нашел еще похожую тему про --deep: http://www.gentoo.ru/node/24616
Тут есть такое сообщение:

mastepaner написал(а):
directly listed - прямо перечисленных
entire dependency tree - ВСЁ дерево зависимостей
"прямо перечисленные" - это только "первый слой" в этом дереве.
Вот пример дерева вверх ногами (корень - внизу)

(a)    (b)     (c)     (d)     (e)
   \   /          \     |     /
    (X)            \    |    /
        \           \   |   /
         \             (Y)
          \           /
           \         /
            \       /
               (*)

Значит выходит, что в даном примере без использования '--deep' обновление пакетов X и Y будет происходить даже если пакет * не нуждается в обновлении. С "--deep" все пойдет глубже, и a,b,c,d,e тоже будут обновлены.

/

user108 написал(а):
И последний вопрос касается --depclean. Пишут, что может снести нужные пакеты, как это может произойти и можно ли как-то застраховаться от этого.

Результат решения задачи расчёта графа зависимостей зависит в том числе от правильности исходных данных.
Что гарантировать для произвольного пакета в произвольный момент времени... несколько затруднительно.

Если вдруг такая оказия произойдёт, revdep-rebuild (из пакета app-portage/gentoolkit) спасёт вождя мирового пролетариата.

ЗЫ: Типовой пример (насколько оно актуально с учётом последних нововведений пока не скажу): зависимости удовлетворяются и старой и новой версиями библиотек. Старая удаляется. Правда сами файлы оставляются (оставлялись) для последующей ручной зачистки, о чём честно предупреждает portage.

:wq
--
Live free or die

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

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