# Проблема взаимной блокировки coreutils и mktemp

## Azik

Coreutils версии 6.10 и выше теперь содержат в себе команду /bin/mktemp, из-за чего блокируется пакет sys-apps/mktemp. Этот пакет может быть необходим другим пакетам, поэтому при обновлении возникает взаимная блокировка обоих указанных пакетов.

Решение: обновить дерево портежей и удалить sys-apps/mktemp. Подробности: https://bugs.gentoo.org/show_bug.cgi?id=207118

```
emerge -C sys-apps/mktemp

emerge -av sys-apps/coreutils

```

Что делать, если удален coreutils

Найти и скачать бинаруный пакет coreutils и установить его, либо попросить кого-нибудь сделать такой для себя.

```
quickpkg coreutils
```

Установка пакета

```
emerge -k coreutils
```

----------

## user11

Подскажите, из каких посылок правильный пользователь Gentoo Linux делает вывод, что после удаления mktemp система будет достаточно работоспособна, чтобы суметь нормально обновить coreutils?

----------

## Azik

не понял?

----------

## user11

Обычно, если делается unmerge чего-то, что пользователь сам не ставил, всегда есть опасность получить нерабочую систему. Например, некоторые в описанной ситуации удаляли coreutils, после чего уже вообще ничего не могли делать, не говоря уж о том, чтобы вновь сделать emerge.

Приведённый Вами рецепт подразумевает, что после удаления mktemp система будет работоспособна. По крайней мере, emerge coreutils в такой ситуации сработает.

Посмотрев на сообщение о блокировке и почитав ChangeLog у coreutils, можно понять, что теперь /bin/mktemp является частью coreutils, а потому mktemp не нужен. То есть можно смело снести mktemp и *одновременно* обновить coreutils.

Но в portage нет команды "сделать A и B" одновременно. Где-то в гугле советуют сначала *собрать* новый coreutils, а потом снести mktemp и поставить только что собранный coreutils. Здесь Вы советуете смело сносить mktemp, и лишь потом собирать новый coreutils. То есть подразумевается безопасность такой процедуры.

Вопрос в том, откуда пользователь может сделать о безопасности такой последовательности действий, если бы он не прочитал Вашего сообщения? Например, Вашего сообщения ещё нет. Или, возможно, он сам на Вашем месте?

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

Или всё же Вы наверняка знали, что именно так делать можно? Если да, как Вы пришли к этому выводу? Какие именно слова в https://bugs.gentoo.org/show_bug.cgi?id=207118 это означают?

Мой вопрос не о том, что мне сделать правильно. Мой вопрос о том, как мне рассуждать, чтобы делать правильно, и не утруждать других вопросами типа "я сделал unmerge coreutils, т.к. в handbook рекомендовали удалить один из blocker-пакетов. Как жить дальше?".

----------

## Azik

Обратно не понял.

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

1. Почему они блокируют друг друга

2. Кто из них менее ценен

3. Что по этому поводу пишет багзилла

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

----------

## Laitr Keiows

 *user11 wrote:*   

> Приведённый Вами рецепт подразумевает, что после удаления mktemp система будет работоспособна. По крайней мере, emerge coreutils в такой ситуации сработает.
> 
> Посмотрев на сообщение о блокировке и почитав ChangeLog у coreutils, можно понять, что теперь /bin/mktemp является частью coreutils, а потому mktemp не нужен. 
> 
> 

 

Этот рецепт работает, я неоднократно проверял. Более того, разве из того что теперь /bin/mktemp является частью coreutils не следует что coreutils могут собраться без  mktemp?  :Smile: 

----------

## user11

 *Quote:*   

> Данный пост я на писал из эмпирическеского опыта, самолично столкнувшись с проблемой

 

 *Quote:*   

> Этот рецепт работает, я неоднократно проверял

 

Спасибо. Подход я понял, буду иметь в виду.

Остаётся понять, есть ли какой-то формальный путь, пусть даже негласно:

 *Quote:*   

> Более того, разве из того что теперь /bin/mktemp является частью coreutils не следует что coreutils могут собраться без mktemp?

 

А почему следует? Afaik, утверждение "если A является частью B, то B может собраться без A" в общем виде не верно. Пример:  /bin/mv является частью coreutils, но coreutils без mv собраться не может (src_install() использует mv). Видимо, в этом рассуждении пропущен ещё какой-то неведомый мне шаг.

PS. К слову, несмотря ни на что, перед unmerge mktemp я всё же на всякий случай "cp `which mktemp` ~"  :Wink: 

----------

## OpticalDezires

Сделал так:

```
emerge -f coreutils && emerge -C mktemp && emerge coreutils
```

и всё работает =)

----------

