Как переместить корень OPAM?

Можно ли переместить корень OPAM? Или создать «переносимую» (в смысле, например, «переносимую Firefox») версию корня OPAM?

То есть установить кучу пакетов через opam --root=/PATH/TO/A, потом переместить /PATH/TO/A в /ANOTHER/PATH/TO/B, и оттуда все запускать.

Наивная попытка привела к небольшой ошибке в "opam config env", где проскочил старый путь. Кроме того, некоторые файлы конфигурации (findlib, global-config) должны были быть скорректированы. После исправления кое-что заработало, но "utop" не работает с

Fatal error: exception Not_found

Является ли это принципиальной проблемой или переносимый корень OPAM — это просто вопрос установки правильных переменных среды после переноса?


person vog    schedule 25.04.2018    source источник
comment
К сожалению, как вы заметили, это немного зависит от пакета. Вы потратите меньше времени на перекомпиляцию.   -  person PatJ    schedule 26.04.2018
comment
Каждый пакет использует свои собственные пути, и многие используют абсолютные пути, например. при запуске ./configure. Я не думаю, что такие пакеты можно легко сделать переносимыми; даже если вы сделаете масштабное sed и вручную замените их абсолютные пути относительными в каждом файле конфигурации, который вы найдете, возможно, некоторые из них перестанут работать. Например, они могут иметь жестко заданные абсолютные пути внутри своих двоичных файлов, поэтому перемещение корня OPAM потребует их перекомпиляции. Может быть, какой-то chroot мог бы сработать, но я недостаточно знаю об этом, чтобы что-то предложить.   -  person anol    schedule 26.04.2018


Ответы (1)


Сам компилятор почти переносим, ​​вопрос установки переменных среды OCAMLLIB и CAML_LD_LIBRARY_PATH, оставшаяся проблема заключается в запуске исполняемых файлов байт-кода, которые встраивают путь к ocamlrun, см. https://caml.inria.fr/mantis/view.php?id=5950 для подробностей.

Насчет пакетов - универсальной гарантии нет, все зависит от того, что делает пакет при сборке. Однако большинство «обычных» библиотек, которые не ожидают найти какие-либо файлы данных во время выполнения, должны работать. Как показывают приведенные выше комментарии, часто бывает быстрее сделать снимок состояния opam (пакет) и перестроить его по другому пути.

person ygrek    schedule 11.05.2018