6

我正在使用 Haskell Stack 包管理器的 2.1.1 版。

如https://mirrors.tuna.tsinghua.edu.cn/help/hackage/中所述,清华大学提供了在中国防火墙后可用的 Hackage 镜像。

但是,当我按照这些说明进行操作时,添加

package-indices:
  - name: Tsinghua
    download-prefix: http://mirrors.tuna.tsinghua.edu.cn/hackage/package/
    http: http://mirrors.tuna.tsinghua.edu.cn/hackage/00-index.tar.gz
    hackage-security:
        keyids:
        - 0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d
        - 1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42
        - 280b10153a522681163658cb49f632cde3f38d768b736ddbc901d99a1a772833
        - 2a96b1889dc221c17296fcc2bb34b908ca9734376f0f361660200935916ef201
        - 2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3
        - 51f0161b906011b52c6613376b1ae937670da69322113a246a09f807c62f6921
        - 772e9f4c7db33d251d5c6e357199c819e569d130857dc225549b40845ff0890d
        - aa315286e6ad281ad61182235533c41e806e5a787e0b6d1e7eef3f09d137d2e9
        - fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0
        key-threshold: 3 # number of keys required

        # ignore expiration date, see https://github.com/commercialhaskell/stack/pull/4614
        ignore-expiry: yes

到 ~/.stack/config.yml,然后当我stack run在我的项目目录中运行时,我看到:

找不到 aeson-1.4.2.0@sha256:8166752a9669597db375343df19805069595fed9c613f98504e418849f40fe18,7007 的 Cabal 文件信息,更新选定的镜像 http://mirrors.tuna.tsinghua.edu.cn/hackage/package.json : 下载根无法反序列化 /root :(第 1 行,第 1 列):意外的“<”需要空格或 JSON 值

它还有一个 Stackage 镜子;我尝试通过添加resolver: https://mirrors.tuna.tsinghua.edu.cn/stackage/lts-haskell/lts-13.25.yamlstack.yaml我的项目来更改 Stackage 解析器,但是失败了:

从https://mirrors.tuna.tsinghua.edu.cn/stackage/lts-haskell/lts-13.25.yaml读取快照时出现异常 :无法解析来自 https://mirrors.tuna.tsinghua.edu.cn的快照/stackage/lts-haskell/lts-13.25.yaml:$中的错误:快照必须具有解析器或编译器

我的项目只是使用创建的默认项目stack new myProjectName,我所做的唯一其他配置更改是添加

setup-info: "http://mirrors.tuna.tsinghua.edu.cn/stackage/stack-setup.yaml"
urls:
  latest-snapshot: http://mirrors.tuna.tsinghua.edu.cn/stackage/snapshots.json
  lts-build-plans: http://mirrors.tuna.tsinghua.edu.cn/stackage/lts-haskell/
  nightly-build-plans: http://mirrors.tuna.tsinghua.edu.cn/stackage/stackage-nightly/  

按照https://mirrors.tuna.tsinghua.edu.cn/help/stackage/~/.stack/config.yaml上的建议。这使我可以从该镜像下载 GHC,但似乎无法从那里拉取软件包。

使 Stackage/Hackage(无论使用什么stack (build|run))使用清华镜像的推荐方法是什么?理想情况下,我不希望从默认 AWS 镜像中提取任何内容。

4

2 回答 2

3

我找到了一种解决方案:https ://github.com/commercialhaskell/stack/issues/4866和https://github.com/commercialhaskell/stack/issues/4870。似乎 Slack 2 弃用了它之前使用的包格式,这是清华镜像使用的格式,因此 Stack 2 不支持镜像。解决方案是使用 2.0 之前的 Slack 或切换到 Cabal。

于 2019-06-22T10:04:37.833 回答
0

[ 2021 年 1 月更新]

清华大学更新了他们关于如何适应 Stackage >= v2.1.1 的指南。

为了节省您的点击次数:

# ADD THESE LINES TO `~/.stack/config.yaml`

package-indices:
  - download-prefix: http://mirrors.tuna.tsinghua.edu.cn/hackage/
    hackage-security:
        keyids:
        - 0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d
        - 1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42
        - 280b10153a522681163658cb49f632cde3f38d768b736ddbc901d99a1a772833
        - 2a96b1889dc221c17296fcc2bb34b908ca9734376f0f361660200935916ef201
        - 2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3
        - 51f0161b906011b52c6613376b1ae937670da69322113a246a09f807c62f6921
        - 772e9f4c7db33d251d5c6e357199c819e569d130857dc225549b40845ff0890d
        - aa315286e6ad281ad61182235533c41e806e5a787e0b6d1e7eef3f09d137d2e9
        - fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0
        key-threshold: 3 # number of keys required

        # ignore expiration date, see https://github.com/commercialhaskell/stack/pull/4614
        ignore-expiry: no
于 2021-01-01T17:34:02.360 回答