Как APT выбирает определенный пакет для установки для обеспечения виртуального пакета, необходимого как зависимость?

Например, awk виртуальный пакет, обеспеченный original-awk, mawk и gawk.

Попытка установить его непосредственно уступает:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package awk is a virtual package provided by:
  original-awk:i386 2012-12-20-4
  mawk:i386 1.3.3-17ubuntu2
  gawk:i386 1:4.1.1+dfsg-1
  original-awk 2012-12-20-4
  mawk 1.3.3-17ubuntu2
  gawk 1:4.1.1+dfsg-1
You should explicitly select one to install.

E: Package 'awk' has no installation candidate

Однако много виртуальных пакетов необходимы как зависимости пакетами, установленными по умолчанию, например awk самостоятельно необходим base-files, какая проверка журналов APT установлена наряду с набором других пакетов через apt-get --yes; так или иначе APT заканчивает тем, что выбрал один из трех автоматически (я вполне уверен, это mawk, но это не точка вопроса).

Как APT выбирает определенный пакет для установки в этом случае?

3
задан 25 February 2016 в 20:47

2 ответа

, Как APT выбирает определенный пакет для установки в этом случае?

APT не выбирает пакет. Это говорит:

Вы должны явно выбирать один для установки.

, Если бы Вы пытаетесь вручную выбрать пакет, он не был бы установлен.

В случае основных файлов в зависимости от awk это не важно. Во-первых, это на самом деле PreDepends на awk, вынуждая dpkg установить awk прежде, чем начать устанавливать основные файлы; во-вторых, mawk имеют приоритет , потребовал , которые установлены при установке системы и способном ворчании Вы, при попытке удалить его. Так, просто не делайте этого.

Теперь, согласно источникам, способные попытки сначала удовлетворение зависимости прежде попытка виртуальные пакеты (т.е. если зависит, firefox | www-browser, проверки, если какой-либо из пакетов установлен, то пытаются установить Firefox, если ни один не). Если невиртуальный пакет не доступен, это, кажется, просто выполняет итерации более чем все пакеты, который обеспечивает виртуальный пакет , если никакие другие зависимости не повреждаются. Другое доказательство комментариев этого поведения это , который приводит к GrpIterator:: функция FindPreferredPkg .

3
ответ дан 1 December 2019 в 15:55

В Depian Packaging Policy не указано, какой конкретный реальный пакет установлен, если существуют альтернативные пакеты, предоставляющие виртуальный пакет.

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

Но если существуют конфликты с одним реальным пакетом, и другой может быть установлен с предоставлением того же виртуального пакета, то будет установлен не конфликтующий пакет.

Вы можете проверить, какой awk используется, запустив

readlink /etc/alternatives/awk
1
ответ дан 1 December 2019 в 15:55

Другие вопросы по тегам:

Похожие вопросы: