`cabal update` не удалось из-за` из памяти`

Вот что выводит cabal update:

Downloading the latest package list from hackage.haskell.org
cabal: out of memory (requested 2097152 bytes)

Причиной может быть нехватка памяти. Что насчет tail 00-index.cache?

pkg: charade 0.1 b# 46384
pkg: charset 0.0 b# 46390
pkg: charset 0.1 b# 46393
pkg: charset 0.2.0 b# 46396
pkg: charset 0.2.1 b# 46399
pkg: charset 0.2.2 b# 46402
pkg: charset 0.2.3 b# 46405
pkg: charset 0.3 b# 46408
pkg: charset 0.3.0.1 b# 46412

Я могу загрузить 00-index.tar.gz и загрузить 00-index.tar. Однако из-за out of memory я не могу создать файл кеша! Может ли кабал генерировать 00-index.cache локально дешевым способом?

cabal --version

cabal-install version 1.16.0.2
using version 1.16.0 of the Cabal library

Ответ 1

У меня возникла аналогичная проблема с запуском микро-экземпляра на AWS (не выполняется обновление кэша, но скомпилирование моей собственной программы). Я выполнил предложения этой ссылки, чтобы создать пространство подкачки, и это сделало трюк.

Из ссылки:

> dd if=/dev/zero of=/tmp/swap bs=1M count=1024
> mkswap /tmp/swap
> swapon /tmp/swap

Команда dd создает файл подкачки с именем "swap" в каталоге /tmp размером 1024 МБ (1 ГБ).

Сделайте этот файл как файл подкачки, используя команду mkswap.

Включить вновь созданный файл подкачки с помощью команды swapon.

Эта ссылка содержит дополнительную информацию об областях подкачки.

Ответ 2

Вы можете просто положить 00-index.cache в нужное место, а cabal-install будет использовать его просто отлично. Чтобы узнать, куда его поместить, просмотрите значение remote-repo-cache и remote-repo в ~/.cabal/config; кеш должен находиться в каталоге, названном именем удаленного репо в каталоге remote-repo-cache. Например, здесь фрагмент моего config:

remote-repo: hackage.haskell.org:http://hackage.haskell.org/packages/archive
remote-repo-cache: /home/dmwit/.cabal/packages

и мой кеш находится в /home/dmwit/.cabal/packages/hackage.haskell.org/00-index.cache.

Ответ 3

Попробуйте добавить больше памяти на компьютер, на котором выполняется обновление кэбля.

Я когда-то пытался установить GHC и скомпилировать Haskell на сервере нижнего уровня DigitalOcean, и компиляция всегда была неудачной из-за нехватки доступной ОЗУ. Проблема снова была решена на более хорошо оборудованном сервере.