разные результаты для команд sudo ocamlfind list и ocamlfind list

У меня есть проблема, которая действительно сводит меня с ума. Я никогда не работал с OCaml, ничего не знаю о нем и как он работает.

Проблема: мне нужно установить библиотеку camlidl. Я сделал это через опам (opam install camlidl).

Как я уже говорил, я понятия не имею об OCaml. ocamlfind list, не отображал список пакетов. Поискал в сети - выяснил, что помогает запуск eval $'opam config eval'.

странно (я не знаю почему) ocamlfind смог увидеть пакет после выполнения этой команды, НО(!) если я запущу sudo ocamlfind list, он покажет список без этого пакета.

Может ли кто-нибудь помочь мне понять, почему это происходит и как это исправить? Мне нужно скомпилировать что-то, для чего требуется camlidl, и это нужно сделать под sudo.

Заранее спасибо!

Исполнение ocamlfind list

bigarray            (version: [distributed with Ocaml])
bytes               (version: [OCaml strictly before 4.02])
camlidl             (version: 1.05)
camlp4              (version: [distributed with Ocaml])
camlp4.exceptiontracer (version: [distributed with Ocaml])
camlp4.extend       (version: [distributed with Ocaml])
camlp4.foldgenerator (version: [distributed with Ocaml])
camlp4.fulllib      (version: [distributed with Ocaml])
camlp4.gramlib      (version: [distributed with Ocaml])
camlp4.lib          (version: [distributed with Ocaml])
camlp4.listcomprehension (version: [distributed with Ocaml])
camlp4.locationstripper (version: [distributed with Ocaml])
camlp4.macro        (version: [distributed with Ocaml])
camlp4.mapgenerator (version: [distributed with Ocaml])
camlp4.metagenerator (version: [distributed with Ocaml])
camlp4.profiler     (version: [distributed with Ocaml])
camlp4.quotations   (version: [distributed with Ocaml])
camlp4.quotations.o (version: [distributed with Ocaml])
camlp4.quotations.r (version: [distributed with Ocaml])
camlp4.tracer       (version: [distributed with Ocaml])
compiler-libs       (version: [distributed with Ocaml])
compiler-libs.bytecomp (version: [distributed with Ocaml])
compiler-libs.common (version: [distributed with Ocaml])
compiler-libs.optcomp (version: [distributed with Ocaml])
compiler-libs.toplevel (version: [distributed with Ocaml])
dynlink             (version: [distributed with Ocaml])
findlib             (version: 1.5.5)
graphics            (version: [distributed with Ocaml])
labltk              (version: [distributed with Ocaml])
num                 (version: [distributed with Ocaml])
num-top             (version: 1.5.5)
num.core            (version: [internal])
oUnit               (version: 2.0.0)
oUnit.advanced      (version: 2.0.0)
oUnit.threads       (version: 2.0.0)
ocamlbuild          (version: [distributed with Ocaml])
ocamlgraph          (version: 1.8.6)
stdlib              (version: [distributed with Ocaml])
str                 (version: [distributed with Ocaml])
threads             (version: [distributed with Ocaml])
threads.posix       (version: [internal])
threads.vm          (version: [internal])
unix                (version: [distributed with Ocaml])

Исполнение sudo ocamlfind list

bigarray            (version: [distributed with Ocaml])
camlp4              (version: [distributed with Ocaml])
camlp4.exceptiontracer (version: [distributed with Ocaml])
camlp4.extend       (version: [distributed with Ocaml])
camlp4.foldgenerator (version: [distributed with Ocaml])
camlp4.fulllib      (version: [distributed with Ocaml])
camlp4.gramlib      (version: [distributed with Ocaml])
camlp4.lib          (version: [distributed with Ocaml])
camlp4.listcomprehension (version: [distributed with Ocaml])
camlp4.locationstripper (version: [distributed with Ocaml])
camlp4.macro        (version: [distributed with Ocaml])
camlp4.mapgenerator (version: [distributed with Ocaml])
camlp4.metagenerator (version: [distributed with Ocaml])
camlp4.profiler     (version: [distributed with Ocaml])
camlp4.quotations   (version: [distributed with Ocaml])
camlp4.quotations.o (version: [distributed with Ocaml])
camlp4.quotations.r (version: [distributed with Ocaml])
camlp4.tracer       (version: [distributed with Ocaml])
compiler-libs       (version: [distributed with Ocaml])
compiler-libs.bytecomp (version: [distributed with Ocaml])
compiler-libs.common (version: [distributed with Ocaml])
compiler-libs.optcomp (version: [distributed with Ocaml])
compiler-libs.toplevel (version: [distributed with Ocaml])
dynlink             (version: [distributed with Ocaml])
findlib             (version: 1.4.1)
graphics            (version: [distributed with Ocaml])
labltk              (version: [distributed with Ocaml])
num                 (version: [distributed with Ocaml])
num-top             (version: 1.4.1)
num.core            (version: [internal])
oUnit               (version: 2.0.0)
oUnit.advanced      (version: 2.0.0)
oUnit.threads       (version: 2.0.0)
ocamlbuild          (version: [distributed with Ocaml])
ocamlgraph          (version: 1.8.5)
stdlib              (version: [distributed with Ocaml])
str                 (version: [distributed with Ocaml])
threads             (version: [distributed with Ocaml])
threads.posix       (version: [internal])
threads.vm          (version: [internal])
unix                (version: [distributed with Ocaml])

Исполнение opam

Installed packages for system:
base-bigarray   base  Bigarray library distributed with the OCaml compiler
base-threads    base  Threads library distributed with the OCaml compiler
base-unix       base  Unix library distributed with the OCaml compiler
camlidl         1.05  Stub code generator for OCaml
ocamlfind      1.5.5  A library manager for OCaml
ocamlgraph     1.8.6  A generic graph library for OCaml
ounit          2.0.0  Unit testing framework loosely based on HUnit. It is similar to JUnit, and other XUnit testing frameworks

Казнь за sudo -i opam list

Installed packages for system:
base-bigarray   base  Bigarray library distributed with the OCaml compiler
base-threads    base  Threads library distributed with the OCaml compiler
base-unix       base  Unix library distributed with the OCaml compiler
camlidl         1.05  Stub code generator for OCaml

person GrimSmiler    schedule 21.04.2015    source источник


Ответы (1)


eval $(opam config env) заполняет вашу среду переменными, которые помогают ocamlfind находить библиотеки, например, виртуальную среду PIP в Python.

Когда вы оцениваете эту команду под учетной записью пользователя, вы заполняете среду только для пользователя, чтобы она не была видна другим пользователям, включая root. Более того, обычно вы устанавливаете пакеты ocaml в локальном режиме пользователя, а не в общесистемном режиме.

Чтобы решить вашу проблему, не углубляясь в инфраструктуру OCaml, я бы предложил следующее:

  1. Если возможно, не используйте sudo. Собственно, я не вижу смысла использовать sudo для компиляции. Возможно, это нужно только для установки. Итак, используйте make и sudo make install. Если вы уже случайно запустили make с sudo, это может создать файлы с правами root, поэтому вам нужно удалить все и начать с нуля.

  2. Если это невозможно (настолько сломана система сборки пакетов), то попробуйте установить opam под пользователем root, и сделать все как root, например, переключиться в режим root с помощью sudo su - и продолжить как обычно.

person ivg    schedule 21.04.2015
comment
Сделал как вы сказали. Вошел в root с sudo su и установил opam, сделал opam init и установил нужные мне библиотеки. После этого снова сделал opam init и запустил eval $'opam config env'. ocamlfind list под root все равно дает тот же результат... нет camlidl lib в списке :( Что может быть не так? - person GrimSmiler; 21.04.2015
comment
я смог найти библиотеку в системе. он находился в папке /home/‹username›/.opam/system/lib/camlidl/. Должен ли я что-то с этим делать? - person GrimSmiler; 21.04.2015
comment
Прежде всего, вы должны запускать eval $(opam config env) в скобках, а не в кавычках. Во-вторых, используйте sudo su - с этим тире. В-третьих, после того, как вы сделали opam init и запустили eval $(opam config env), не забудьте установить camlidl с opam install camlidl - person ivg; 21.04.2015
comment
Я нашел лучшее/более простое решение для таких, как я. можно просто сделать sudo apt-get install camlidl и это сэкономит вам время и нервы. Тем не менее, я тоже попробую ваше решение, просто у меня сейчас мало времени. У вас есть отметка за ответ. Спасибо! - person GrimSmiler; 22.04.2015