# Удаление пакета с зависимостями

## serg_sk

Как такое можно осуществить? Например, при установке gdesklets-core он вытянул и поставил около 86 пакетов. Как мне теперь можно удалить gdesklets-core вместе с зависимостями? Порылся в man emerge... видимо у меня плохо с английским.

----------

## Balancer

Насколько я понимаю, emerge этого не умеет.

Нужно искать сторонние утилиты.

----------

## serg_sk

 *Balancer wrote:*   

> Насколько я понимаю, emerge этого не умеет.
> 
> Нужно искать сторонние утилиты.

 

Какие например? Я бы и сам потер по одному, если бы у меня полный список был, мне не в лом  :Smile: 

----------

## Double

 *serg_sk wrote:*   

>  *Balancer wrote:*   Насколько я понимаю, emerge этого не умеет.
> 
> Нужно искать сторонние утилиты. 
> 
> Какие например? Я бы и сам потер по одному, если бы у меня полный список был, мне не в лом 

 

список есть в /var/log/emerge.log

----------

## serg_sk

 *Double wrote:*   

>  *serg_sk wrote:*    *Balancer wrote:*   Насколько я понимаю, emerge этого не умеет.
> 
> Нужно искать сторонние утилиты. 
> 
> Какие например? Я бы и сам потер по одному, если бы у меня полный список был, мне не в лом  
> ...

 

Я знаю, но недавно сделал cat /dev/null > /var/log/emerge.log, ибо он был слишком большой.

----------

## Balancer

```

emerge gentoolkit

qpkg -I -nc gdesklets-core

```

Получишь полный список пакетов, от которых твой зависит.

Кстати, я только сейчас сообразил, что автоматически удалить все пакеты, от которых зависит данный нельзя. Он удалит всё до уровня system  :Very Happy:  Нужно учитывать зависимости и других пакетов - задача не шибко тривиальная.

Удалить все пакеты, от которых зависит твой:

```
qpkg -I -nc gdesklets-core | xargs emerge -C
```

По идее - нужно збрасывать вывод qpkg в файл, править его ручками, и уже его скармливать xargs emerge -C

----------

## Double

 *serg_sk wrote:*   

>  *Double wrote:*    *serg_sk wrote:*    *Balancer wrote:*   Насколько я понимаю, emerge этого не умеет.
> 
> Нужно искать сторонние утилиты. 
> 
> Какие например? Я бы и сам потер по одному, если бы у меня полный список был, мне не в лом  
> ...

 

ОО! большой это сколько интересно? 

>/var/log/emerge.log покороче будет  :Smile: 

----------

## serg_sk

Ок. Будем пробовать  :Smile: 

----------

## YD

Balancer не поможет.

У emerge  есть опция --depclean, после удаления пакета можно ей воспользоваться, только очень аккуратно.

----------

## serg_sk

```
qpkg -I -nc gdesklets-core
```

Выдал мне только одно название, тобишь gdesklets-core  :Smile:  Но с его помощью я узнал все что у меня установлено, вообщем потыкаю сначала через emerge --depclean с ключиком -p  :Smile:  А потом остальное вручную  :Smile: 

----------

## hlroad

Собственно там есть две опции для таких целей:

emerge --depclean

и

emerge --purge

После первой система перехиодит в маловменяемое состояние с вероятностью 50%, после второй - с вероятностью 100% (ибо она выкашивает всякие automake и autoconf'ы).

Собственно со слотованными пакетами вообще бяда: ведь в portage указано какие слоты подходят для того или иного пакета, но не указано какие именно были использованы в данной конкретной инкарнации!

----------

## YD

Может --prune, а не purge?

так --depclean не надо запускать, только с -pv. А потом  ручками составить список ненужного.

----------

## hlroad

 *YD wrote:*   

> Может --prune, а не purge?
> 
> 

 

Oops. Конечно. Просто на давно стоящей системе может быть куча пакетов, которые, в общем-то, никому не нужны, но которые --depclean не покажет (скажем штук 10 phpBB  :Smile: ). Но поскольку --prune всегда сносит что-то поленое, то...

 *YD wrote:*   

> так --depclean не надо запускать, только с -pv. А потом ручками составить список ненужного.

 

Угу. Хотя в теории ничего лишнего удалиться не должно, но... Но тут хотя бы иногда все правильно срабатывает...

----------

## fank

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

1. Определение всех зависимостей от удаляемого пакета

2. Определение для каждого пакета, определённого в п.1 его "нужности" для дальнейшей работы системы, то есть проверка, зависит ли хотя бы один пакет в системе от данного

----------

## Balancer

 *fank wrote:*   

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

 

Нужно или заводить БД со связями _всех_ пакетов, или ЖУУТКО тормозить  :Smile: 

Наверное, по хорошему, нужно работать с базой того же esearch  :Smile: 

----------

## serg_sk

Вообщем вывод такой, что emerge не очень комфортен при удалении  :Smile:  Нужно держать список всего установленного, и если нужно снести все с зависимостями, то смотреть по списку и удалять. Или как говорил Balancer нужна база данных  :Smile: 

----------

## hlroad

 *serg_sk wrote:*   

> Вообщем вывод такой, что emerge не очень комфортен при удалении  Нужно держать список всего установленного, и если нужно снести все с зависимостями, то смотреть по списку и удалять. Или как говорил Balancer нужна база данных 

 

Ага - как зайцу стоп-сигнал она нужна. Список всего установленного имеется в /var/db/pkg, однако. Зависимости там тоже есть. Собственно на основании этой информации --depclean и работает. Но... не все зависимости там описаны, да. Скажем в файле kdelibs-3.4.0-r2.ebuild нписано:

```

RDEPEND="

...

openexr? ( >=media-libs/openexr-1.2 )

..."

```

А вот в kdelibs-3.3.2-r9.ebuild такой строчки нету. Значит ли это, что openexr можно снести если используется KDE 3.3.2 ? Чёрта с два: это ошибка в .ebuild'е: если openxr установлен, то kdelibs 3.3.2 его находит и использует! Возможно когда-то эту ошибку и исправят, но... установленных пакетов это уже не коснется. А что касается слотовых пакетов - там вообще швах. Скажем если у меня стоит mod_perl 2.0.0rc6, perl 5.8.5 и perl 5.8.6. Могу я какой-нибудь из perl'ов снести ? А это зависит от того, в каком порядке всё это ставилось... В базе в любом случае будет одна и та же информация записана - за исключением списка файлов, конечно.

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

----------

## EdiG

Проще делать так 

```

emerge -pv kde >> kde
```

потом просто меньше проблем с удалением будет

----------

## fank

вообще говоря, это при большом желании можно сделать при помощи двух-трёх стандартных команд вроде emerge, equery и небольшого шелл-скрипта

если вызывать equery с ключом d, то будут показаны зависящие пакеты от данного

дальше, надеюсь, понятно?

----------

## hlroad

 *fank wrote:*   

> вообще говоря, это при большом желании можно сделать при помощи двух-трёх стандартных команд вроде emerge, equery и небольшого шелл-скрипта
> 
> если вызывать equery с ключом d, то будут показаны зависящие пакеты от данного
> 
> дальше, надеюсь, понятно?

 

Совершенно непонятно. Чем это --depclean будет отличаться, спрашивается ? И сможет ли твой скриптик разобраться с чдесами типа таких:

```

ruby-1.8.2-r1.ebuild :

RDEPEND="...

>=dev-ruby/ruby-config-0.3

..."

ruby-config-0.3.ebuild:

PDEPEND="virtual/ruby"

```

--depclean не может  :Sad: . Ибо вместо норального алгоритми сборки мусора, похоже, refcounting использует...

----------

## GreenDragon

 *serg_sk wrote:*   

> 
> 
> ```
> qpkg -I -nc gdesklets-core
> ```
> ...

 

Не совсем в тему  :Smile: 

```
 * The qpkg and etcat tools are deprecated in favor of equery and

 * are no longer installed in /usr/bin in this release.
```

----------

## bukazoid

equery depgraph <имя пакета>

рисует дерево зависимостей

те что без зелёного были установлены как зависимости.

add

с emerge как с транзакциями в SQL работать можно ?

типа как бы удалил пакет с зависимостями ....

зделал emerge -D world ... посмотрел что нужного удалил ....

принял конечные изменения, в итоге нужные пакеты не были удалены  :Smile: 

впринципе интересуют возможности отката ...

----------

## YD

FEATURES="buildpkg" или quickpkg

Самый надёжный откат :>

----------

