Как использовать зеркала Цинхуа из Hackage и Stackage с менеджером пакетов Haskell Stack - PullRequest
3 голосов
/ 19 июня 2019

Я использую менеджер пакетов Haskell Stack версии 2.1.1.

Университет Цинхуа предоставляет зеркало Hackage, доступное за китайским брандмауэром, как описано в https://mirrors.tuna.tsinghua.edu.cn/help/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, Обновление выбранного зеркала http://mirrors.tuna.tsinghua.edu.cn/hackage/package/ Скачивание рута Не удалось десериализовать /root.json: неправильно сформировано: (строка 1, столбец 1): неожиданное "<" ожидание пробела или значения JSON </p>

У этого также есть Зеркало Стека; Я попытался добавить изменение решателя Stackage, добавив resolver: https://mirrors.tuna.tsinghua.edu.cn/stackage/lts-haskell/lts-13.25.yaml к stack.yaml для моего проекта, но это не удалось с:

Исключение при чтении снимка с 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/  

до ~/.stack/config.yaml, как предложено для https://mirrors.tuna.tsinghua.edu.cn/help/stackage/. Это позволило мне загрузить GHC с этого зеркала, но, похоже, не позволяет извлекать пакеты оттуда.

Каков рекомендуемый способ использования Stackage / Hackage (независимо от того, что используется stack (build|run)) с использованием зеркала Цинхуа? В идеале я не хочу, чтобы что-либо извлекалось из зеркала AWS по умолчанию.

1 Ответ

1 голос
/ 22 июня 2019

Я нашел решение такого рода: https://github.com/commercialhaskell/stack/issues/4866 и https://github.com/commercialhaskell/stack/issues/4870. Кажется, Slack 2 устарел ранее использовавшимся форматом пакета, который используется зеркалом Цинхуа, поэтому Stack 2 не поддерживает зеркало. Решение - использовать Slack до 2.0 или перейти на Cabal.

...