Installing OPAM 1.1.1 on a CentOS 6.5
I'm in this situation: I need to compile an OCaml program on a CentOS 6.5 server. This is actually quite problematic, because CentOS 6.5 provide out of the box a very old OCaml 3.11.2, released by INRIA in January 2010, more than four years ago.
No problem, OPAM come to the rescue! No. The OPAM team doesn't provide a binary executable compatible with the (actually very old) system libraries present in CentOS.
Ok, step back: OPAM can be compiled from sources (instructions here) so it's just a matter of minutes. Again: nope. To compile OPAM you need at least OCaml 3.12.1, while in CentOS we have only 3.11.2.
Step back: first compile and install OCaml from sources. This time I say no, because the whole point of OPAM is to get an up and running OCaml environment in a few minutes, which is actually true in most cases.
I decide to install OCaml using GODI, the “old” OCaml source distribution, the one everybody used before OPAM was born. So the fastest steps to have an OPAM and OCaml environment on a CentOS server are:
- download and install GODI;
- clone the OPAM repository, compile and install it; it will find a “system” compiler provided by GODI;
$ opam switch 4.01.0
will recompile a new environment;$ opam switch remove system
to delete the “system” environment;$ rm -Rf ~/godi
.
No root access is required in this process, I usually install OPAM in ~/opam
, and GODI in ~/godi
.
There is an irony in all this story: GODI has been the OCaml source distribution for years, and the coming of OPAM, which is actually newer and has some important features missing in GODI, has produced many frictions in the OCaml community, that in the end caused the shut down of GODI.
The moral part here is: embrace the new things, but don't be too impatient in throwing out the window the precious work that, in the end, still works.
In any case, I want to thank both Gerd Stolpmann (author of GODI) and the OPAM team: they gave to the OCaml community a mature, industrial grade, set of tools to use OCaml.
22 May 2014, 09:57
Try this on Debian (or Fedora/some other distro with new enough OCaml):
* install opam
* opam switch 4.01.0+musl+static
* eval `opam config env`
* configure and compile opam from sources
* you should now have a fully statically linked opam binary that you can copy to old distributions (within some sane limits, I think some 2.6.32 kernel is required)
Note: you can't create a fully statically linked binary with (e)glibc
due to gethostbyname/etc. requiring matching glibc version at runtime (there is a linker warning about that).
Another possibility is to try the LSB SDK and 4.01.0+lsb.