[erlang-questions] Code Archives (Turning rebar into a package manager)

Ola Andersson A <>
Wed Oct 31 13:59:14 CET 2012


Hi,

I've been experimenting a little with escripts including code archives for test purposes.
It's a really useful feature that seems to work nicely at least this far.

The only stumbling block I have seen is when an application included in the archive uses C drivers.
When the path (code:priv_dir(App)) provided to e.g. erl_ddll points into a code archive it will result in an error.

I fixed it with a hack that extracted the driver to a temp directory and patched the app to read the driver from the temp directory and then remove it.
Not something I would use in production code. 

Are there any plans to add the possibility to load a driver directly from an archive?

BR
/OLA.

> -----Original Message-----
> From:  
> [mailto:] On Behalf Of Joe 
> Armstrong
> Sent: den 30 oktober 2012 18:34
> To: Andrew Berman
> Cc: Erlang
> Subject: Re: [erlang-questions] Turning rebar into a package manager
> 
> On Tue, Oct 30, 2012 at 6:31 PM, Joe Armstrong 
> <> wrote:
> > On Tue, Oct 30, 2012 at 6:17 PM, Andrew Berman 
> <> wrote:
> >> I come from the Java world and I'm sorta blown away that Erlang 
> >> doesn't have something comparable to JAR files, which work 
> just fine.
> >
> > Well it does actually - but this is not stunning well documented.
> >
> > In the manual page for code there is a section entited
> >
> > LOADING OF CODE FROM ARCHIVE FILES
> 
> My mail got sent before I'd completed it ...
> 
> programs like rebar use these features
> 
> /Joe
> 
> 
> >
> >
> >>  Everyone needs to
> >> agree on a standard for which to package the applications. 
>  JARs are 
> >> just zips of class files with config files, so why not start there 
> >> and just have a zip file with the BEAMs and priv directory with 
> >> configs.  Then we need erl to be able to read these zip 
> files and use 
> >> them as libraries without having to unzip them.  I think 
> we need to 
> >> just start simple and then evolve over time if we need to.
> >>
> >> --Andrew
> >>
> >> On Tue, Oct 30, 2012 at 4:08 AM, Tim Watson 
> >> <>
> >> wrote:
> >>>
> >>>
> >>> On 30 Oct 2012, at 09:41, Ignas Vyšniauskas wrote:
> >>>
> >>> > On 10/23/2012 09:46 AM, Joe Armstrong wrote:
> >>> >> The above link has an example command
> >>> >>
> >>> >>>> git fetch-pack --include-tag -v 
> >>> >>>> :hyperthunk/gitfoo.git
> >>> > refs/tags/lager-0.9.4
> >>> >
> >>> > Wouldn't --depth=1 make it even better? Do we need all of the 
> >>> > history here?
> >>> >
> >>>
> >>> Indeed we do not, though I've not tried that. Someone 
> also mentioned 
> >>> to me offline (a while ago) that they were concerned 
> about using git 
> >>> as a backend rather than adopting something that is not only 
> >>> distributed but actually has mirrors in place, e.g., apt/yum or 
> >>> whatever.  Stashing things using git simply seemed like a 
> *free* way 
> >>> to get started when I was first looking at it.
> >>>
> >>> So, I'm fairly sure we're not going to figure out a way 
> to do this 
> >>> that pleases everybody. And *even* if the package management and 
> >>> distribution problem was neatly solved, there would be 
> cases where 
> >>> you might actually
> >>> *want* source code dependencies instead. Another reason 
> we looked at 
> >>> git was because once you've built everything, if you're resolving 
> >>> dependencies from a central location (like $HOME/repo or 
> whatever) 
> >>> then you've got to deploy them as a snapshot each time 
> they're built 
> >>> and so on. This stuff actually gets quite involved - using say 
> >>> maven, which is actually very good at managing this, it can still 
> >>> make the development process over complicated at times.
> >>>
> >>> Take an example project: RabbitMQ. You're building 
> multiple projects 
> >>> that depend on each other, and the bug you're fixing 
> involves making 
> >>> changes to three different components, each of which 
> lives in its own repository.
> >>> How're you going to figure out which projects need to be built if 
> >>> they're all completely discrete by the time they go into the 
> >>> repository? Of course its easy to solve dependencies with 
> make and 
> >>> rebar will compile *including* dependencies by default, 
> which goes a 
> >>> long way to making this situation workable in practise.
> >>>
> >>> Of course what Joe is really talking about is the ability 
> to install 
> >>> *other people's work* for which you have absolutely no (or maybe 
> >>> just very
> >>> little) interest in the source code. I typically don't care how a 
> >>> particular bit of cowboy or webmachine or whatever work, 
> as long as 
> >>> it does I just ignore it.
> >>>
> >>> And this problem cannot be *that hard* to solve, because you know 
> >>> what - stuff like rubygems/bundler is really damn useful, as it 
> >>> PyPI. I'm sure the node thing is great, though I've never looked. 
> >>> Even OCaml Godi comes in useful and despite the vitriol I 
> hear about it, cabal+hackage is invaluable.
> >>> Point is, these things make it easy to get stuff done, 
> thought they 
> >>> have gaps, flaws and whatnot - they still add a lot of value.
> >>>
> >>> Oh and BTW if someone does come up with a system to do 
> this, then it
> >>> *should* just be packaged as a rebar plugin, as there's 
> no need to 
> >>> change rebar at all in order to override things like these.
> >>>
> >>> Cheers,
> >>> Tim
> >>>
> >>>
> >>>
> >>> _______________________________________________
> >>> erlang-questions mailing list
> >>> 
> >>> http://erlang.org/mailman/listinfo/erlang-questions
> >>>
> >>
> >>
> >> _______________________________________________
> >> erlang-questions mailing list
> >> 
> >> http://erlang.org/mailman/listinfo/erlang-questions
> >>
> _______________________________________________
> erlang-questions mailing list
> 
> http://erlang.org/mailman/listinfo/erlang-questions
> 


More information about the erlang-questions mailing list