opam: aspcud installation on linux

Opam - это пакетный менеджер для Ocaml, навроде pip для python, cpan для perl и т.д.

Если opam используется без солвера, то иногда возникают очень странные схемы разрешения зависимостей при обновлении, установки новых программ через него. Например, иногда для того, чтобы обновить версию пакета он требует сначала сделать даунгрейд его зависимостей, установить новую версию искомого пакета, а затем сделать апдейт его зависимостей. В довершении, конечно же, он начинает падать при сборке всего этого счастья.

Самими разработчиками opam рекомендуется использовать солвер aspcud для разрешения пакетных зависимостей. Для систем на основе Debian/Ubuntu, достаточно уставить требуемый пакет и задать настройку opam:

$ apt-get install aspcud
$ echo 'solver: "aspcud"' >> ~/.opam/config

Для таких систем как Fedora всё оказывается несколько сложнее. Предлагается установить бинарный пакет. Найти его можно по ссылке: https://sourceforge.net/projects/potassco/files/aspcud/.
Далее его необходимо разархивировать и добавить директорию в переменную окружения PATH. В моём случае он лежит в директории /home/user/bin/aspcud.

Теперь, если вызвать aspcud в терминале, будет выдаваться следующая ошибка:

$ aspcud -v
error: could not lstat file
$ strace -e trace=lstat aspcud # посмотрим, какой файл он ищет
lstat("aspcud", 0x7ffcb5174ef0) = -1 ENOENT
error: could not lstat file
+++ exited with 1 +++
$ touch aspcud # попробуем создать этот файл пустым
$ aspcud -v
aspcud version 1.9.1
Copyright (C) Roland Kaminski
License GPLv3+: GNU GPL version 3 or later
...
$ `which aspcud` -v # попробуем вызвать по абсолютному пути
aspcud version 1.9.1
Copyright (C) Roland Kaminski
...

Судя по всему, он ищет файл конфигурации aspcud в директории запуска. Проблема в том, что если указать настройку для opam так, как это было сделано для Debian/Ubuntu (solver: "aspcud"), то opam работать не будет, так как солвер будет падать ровно с ошибкой lstat. Однако, если в настройке задать полный путь до солвера, то всё магическим образом заработает как требуется. Соответственно:

$ echo "solver: \"$(which aspcud)\"" >> ~/.opam/config

Итоговый файл конфигурации opam ~/.opam/config должен выглядеть примерно следующим образом:

opam-version: "1.2"
repositories: ["default"]
jobs: 4
download-jobs: 3
switch: "4.02.3"
solver: "/home/user/bin/aspcud/aspcud"

Comments

comments powered by Disqus