caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: David Scott <scott.dj@gmail.com>
To: Hans Ole Rafaelsen <hrafaelsen@gmail.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Create a deployable application unit from OPAM?
Date: Thu, 29 Mar 2018 19:13:27 +0100	[thread overview]
Message-ID: <CAG_esB0kU0pqRr-X-Ck6GLv0geeDz7HFPbZ48dFOBbEAZbmrDg@mail.gmail.com> (raw)
In-Reply-To: <CALs4vDbJ+vjWhE3tNyz54wKyQwJ3HV_6N1=94dZs_vQzEK_MxQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2976 bytes --]

Hi,

I had a quick go at creating something with Docker: (and alpine since I was
more familiar with it, but I suspect a similar technique would work with
ubuntu)

https://github.com/djs55/experiments/pull/1

It uses `opam` to build a simple OCaml example (taken from cryptokit) which
needs `libgmp` at runtime. The `Dockerfile` has a slightly hacky attempt to
detect the runtime dependency:

opam depext -n cryptokit | grep -v '#' | grep '\-dev' | while read in; do
basename "$in" -dev; done > needed-packages.txt

It assumes that

- all external C libraries have an alpine depext called foo-dev
- foo-dev has a corresponding runtime package called foo

and installs these `foo` in an output minimal alpine image (i.e. one
without the development tools or other unnecessary stuff)

Another approach would be to use `ldd` or `objdump` recursively to find
libraries and copy only those binaries into the output (possibly using
`FROM scratch`?)

I don't know if this will help -- I realise my test case is a bit minimal
:-)

Cheers,
Dave


On Thu, Mar 29, 2018 at 5:31 PM, Hans Ole Rafaelsen <hrafaelsen@gmail.com>
wrote:

> Hi,
>
> I have small application written using Ocsigen. Ocaml and the rest of the
> development environment is installed using OPAM.
>
> Now I want to install this application on a few other nodes, without
> having to bring bring along the whole development process for deployment on
> each node. What I want to end up with, is a single unit, e.g a tar-file, a
> docker container or similar, that can be copied and deployed to the target
> nodes. This unit should only contain the binaries needed to run the
> application.
>
> I have tried to ask on the Ocsigen mailing-list how do do this for Ocsigen
> applications, but without success. But I guess the problem is more related
> to how to deploy applications built using OPAM. I did not find any way to
> do this with OPAM, but I might have missed something. I have tried to copy
> all the binary files (.so, .cmxa .cmxs, etc) from the OPAM directory and
> setting the environment variables to point the this new location, but
> without much success. When starting ocsigenserver it was not able to solve
> all symbols. Looking more into the problem, it looks like binaries such as
> ocsigenserver has hard coded the location of the OPAM development
> environment. Might be possible to override this using environment
> variables, but I'm not sure how. So I gave up on this track.
>
>
> Is there a way to generate such a deployable unit from OPAM development
> environment?
>
> Do anyone have some tips / best practice on how to deploy applications
> built using OPAM?
>
> (I'm developing and want to deploy on Ubuntu 16.04.)
>
> Regards,
>
> Hans Ole Rafaelsen
>



-- 
Dave Scott

-- 
Caml-list mailing list.  Subscription management and archives:
https://sympa.inria.fr/sympa/arc/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

[-- Attachment #2: Type: text/html, Size: 3675 bytes --]

  reply	other threads:[~2018-03-29 18:13 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-29 16:31 Hans Ole Rafaelsen
2018-03-29 18:13 ` David Scott [this message]
2018-03-29 18:50   ` Hans Ole Rafaelsen
2018-03-29 22:44     ` Gerd Stolpmann
2018-03-30 14:11 ` Louis Gesbert
2018-04-02 18:17   ` Hans Ole Rafaelsen
2018-04-03  0:25   ` Francois BERENGER

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAG_esB0kU0pqRr-X-Ck6GLv0geeDz7HFPbZ48dFOBbEAZbmrDg@mail.gmail.com \
    --to=scott.dj@gmail.com \
    --cc=caml-list@inria.fr \
    --cc=hrafaelsen@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).