[prev in list] [next in list] [prev in thread] [next in thread] 

List:       nix-dev
Subject:    [Nix-dev] nix-bundle: Bundle Nix derivations to run anywhere
From:       Matthew Bauer <mjbauer95 () gmail ! com>
Date:       2017-02-07 0:33:19
Message-ID: CAFnZKr1OZqia-vY1mSpX+x14P74xVKoSOLUSbWH2qYRMqq3n6g () mail ! gmail ! com
[Download RAW message or body]

GitHub page: https://github.com/matthewbauer/nix-bundle

I just wanted to post about a little project I've been working on. I'm
calling it "nix-bundle".

Basically, what it does is: take a Nix closure, compress it into a
tarball, and turn that tarball into an executable using "Arx". The
final result looks like a plain shell script, but actually has a
tarball closure appended to it. When you run that script, Arx will
execute "nix-user-chroot" (which is included in the closure) which
will setup a /nix/ directory, then execute a target executable. All of
this should work "out of the box" for any Nix derivation folder with a
valid executable.

For example, to generate a "hello" bundle:

./nix-bundle.sh hello /bin/hello

"hello" specifies pkgs.hello and /bin/hello specifies the file
${pkgs.helloi}/bin/hello to be executed. The output file will just be
called "hello".

The result is a "bundle" that can run without Nix being installed! No
external dependencies are needed because they are all contained within
the Nix closure.

There are two main drawbacks: slow startup and large file size.
Extracting the tarball takes time and this adds on to startup times.
Also, because everything is included from the Nix closure, complicated
apps tend to be much larger because of the dependency tree.

I've been experimenting with using AppImage as a format to package
them in, but it is not currently ready yet.
_______________________________________________
nix-dev mailing list
nix-dev@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-dev
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic