ghc-pkg check将列出损坏的包,以及它们损坏的原因,这是非常好的。但据我所知,没有自动处理这些损坏的包的方法。处理损坏的包的推荐方法是什么?(最好不要重新安装GHC)
发布于 2011-11-01 10:33:36
希望您已经足够聪明,不会破坏您的全局包数据库中的任何内容。那里的损坏很容易意味着重新安装GHC是必要的。因此,让我们假设破坏仅限于用户包db (除了可能由用户包遮蔽的全局中的一个或两个包)。如果只有几个软件包损坏,您可以通过注销违规软件包来修复您的设置。
$ ghc-pkg unregister --user borken这会经常抱怨注销borken会破坏其他包。你是先尝试取消注册,还是用--force立即取消注册博肯,然后再处理新出现的问题,这主要取决于你的选择。确保您只从用户db注销包。如果情况不是太糟糕,在注销一小部分包之后,ghc-pkg check将不再报告损坏的包。
另一方面,如果很大一部分软件包被破坏,在其他操作系统上可能更容易完全擦除用户的db、$ 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。在world文件中,用"< 0.12“替换hmatrix上的-any”约束“产生了一个干净的安装计划。
因此,在修改了world文件中的一些约束之后,您将从cabal获得一个安装计划。检查这是否会重新安装您已有的任何软件包(安装新版本可能是可以的,重新安装相同的版本会有麻烦)。如果你对cabal的安装计划感到满意,可以在cabal install world忙的时候泡一壶好茶。再次运行ghc-pkg check,以验证一切是否正常。
一个不错的建议是:如果您不知道安装一个包需要做什么,请始终先使用--预演运行。
如果你通过使用cabal进行全局安装而破坏了你的全局包数据库,注销攻击者的策略可能会奏效,但它也可能无法挽回地破坏你的ghc,这取决于以哪种方式破坏了什么。如果您通过安装操作系统发行版的软件包破坏了全局数据库,请安装新的GHC,诅咒发行版打包者,并尝试帮助他们防止类似事件的进一步发生。
一个cabal repair命令会很好,但就目前而言,修复一个损坏的设置还需要做更多的工作。
发布于 2011-11-01 14:10:30
一段时间以来,我一直依赖于这个ghc-pkg-clean script。它会删除所有损坏的软件包,并根据需要重新安装它们。对于更严重的破坏,我使用ghc-pkg-reset script。
但今天,我发现了ghc-pkg-autofix,它可以自动完成这一过程--被破坏的包变得完整。我不知道它能做什么,YMMV。
https://stackoverflow.com/questions/7961604
复制相似问题