Исправление проблем, отмеченных проверкой ghc-pkg - PullRequest
39 голосов
/ 01 ноября 2011

Довольно приятно, что ghc-pkg check перечислит сломанные пакеты и почему они сломаны. Но, насколько я знаю, не существует автоматизированного способа позаботиться о сломанных пакетах. Каков рекомендуемый способ борьбы с сломанными пакетами? (Желательно не переустанавливать GHC)

Ответы [ 2 ]

30 голосов
/ 01 ноября 2011

Надеюсь, вы были достаточно мудры, чтобы ничего не сломать в вашей глобальной базе данных пакетов.Поломка там может легко означать, что переустановка GHC необходима.Итак, давайте предположим, что поломка ограничена пользовательским пакетом db (за исключением, возможно, одного или двух пакетов в глобальном теневом копировании пользовательских пакетов).Если повреждены только несколько пакетов, вы можете исправить вашу настройку, отменив регистрацию нарушающих пакетов,

$ ghc-pkg unregister --user borken

, которые часто будут жаловаться на то, что незарегистрированная borken сломает другие пакеты.Пытаетесь ли вы отменить регистрацию этих первых или немедленно отменить регистрацию с помощью --force и иметь дело с вновь разбитыми впоследствии, в основном вопрос выбора. Удостоверьтесь, что вы отменяете регистрацию пакетов только от пользователя db. Если что-то не слишком мрачно, после отмены регистрации нескольких пакетов ghc-pkg check сообщит, что больше не будет сломанных пакетов.
Если нас другой стороны, большая часть пакетов повреждена, возможно, будет проще полностью стереть пользовательскую базу данных, $ rm -rf ~/.ghc/ghc-version/package.conf.d или аналог в других ОС.

В любом случае вы потеряете пакеты, которые вам все еще нужныиспользовать, поэтому вы попытаетесь переустановить их, не ломая ничего заново.Запустите

$ cabal install world --dry-run

, который попытается создать согласованный план установки для всех пакетов, установленных с cabal-install.Если этого не произойдет, он распечатает причины, после чего вы сможете исправить проблемы, добавив ограничения к пакетам, перечисленным в файле мира (~/.cabal/world) - например, хотя у меня нет сломанных пакетов (согласно ghc / ghc-pkg, cabal install world --dry-run сказал мне, что не может настроить vector-algorithms-0.5.2, что зависит от vector >= 0.6 && < 0.8 (у меня установлен vector-0.7.1).Причина в том, что hmatrix-0.12.0.1 требует vector >= 0.8.Замена -any «ограничения» на hmatrix на файл «<0,12» в мировом файле привела к чистому плану установки. <br>Таким образом, после небольшого возмущения с ограничениями в мировом файле, вы получите план установкииз кликиПроверьте, будет ли это переустанавливать какие-либо пакеты, которые у вас уже есть (установка более новой версии, вероятно, в порядке, переустановка той же версии означает проблемы).Если вы довольны планом установки Кабала, cabal install world и варите хороший чайник, пока GHC занят.Выполните ghc-pkg check еще раз, чтобы убедиться, что все в порядке.

Полезный совет: если вы не знаете, что влечет за собой установка пакета, всегда сначала используйте --dry-run.

Если вы разбили свою глобальную базу данных пакетов, выполнив глобальные установки с помощью cabal, стратегия отмены регистрации нарушителей может сработать, но она также может безвозвратно сломать ваш ghc, что зависит от того, что сломано, каким образом,Если вы сломали свою глобальную базу данных, установив пакеты из своего дистрибутива ОС, установите новый GHC, прокляните дистрибутивы и постарайтесь помочь им предотвратить дальнейшие подобные события. Команда

A cabal repair была бы очень хорошаНо, к сожалению, в настоящее время восстановление сломанной установки требует гораздо больших усилий.

15 голосов
/ 01 ноября 2011

В течение некоторого времени я использовал этот ghc-pkg-clean скрипт .Он удаляет все сломанные пакеты, и я переустанавливаю их по мере необходимости.Для более серьезной поломки я использую скрипт ghc-pkg-reset .

Сегодня, однако, я нашел ghc-pkg-autofix , который автоматизирует это далее -сломанные пакеты становятся неразрушенными.Я не знаю, что он делает, YMMV.

...