diff options
Diffstat (limited to 'doc/builders/special')
-rw-r--r-- | doc/builders/special/fhs-environments.section.md | 45 | ||||
-rw-r--r-- | doc/builders/special/fhs-environments.xml | 122 | ||||
-rw-r--r-- | doc/builders/special/mkshell.section.md | 15 | ||||
-rw-r--r-- | doc/builders/special/mkshell.xml | 24 |
4 files changed, 60 insertions, 146 deletions
diff --git a/doc/builders/special/fhs-environments.section.md b/doc/builders/special/fhs-environments.section.md new file mode 100644 index 000000000000..512a31cae0f1 --- /dev/null +++ b/doc/builders/special/fhs-environments.section.md @@ -0,0 +1,45 @@ +# buildFHSUserEnv {#sec-fhs-environments} + +`buildFHSUserEnv` provides a way to build and run FHS-compatible lightweight sandboxes. It creates an isolated root with bound `/nix/store`, so its footprint in terms of disk space needed is quite small. This allows one to run software which is hard or unfeasible to patch for NixOS -- 3rd-party source trees with FHS assumptions, games distributed as tarballs, software with integrity checking and/or external self-updated binaries. It uses Linux namespaces feature to create temporary lightweight environments which are destroyed after all child processes exit, without root user rights requirement. Accepted arguments are: + +- `name` + Environment name. +- `targetPkgs` + Packages to be installed for the main host's architecture (i.e. x86_64 on x86_64 installations). Along with libraries binaries are also installed. +- `multiPkgs` + Packages to be installed for all architectures supported by a host (i.e. i686 and x86_64 on x86_64 installations). Only libraries are installed by default. +- `extraBuildCommands` + Additional commands to be executed for finalizing the directory structure. +- `extraBuildCommandsMulti` + Like `extraBuildCommands`, but executed only on multilib architectures. +- `extraOutputsToInstall` + Additional derivation outputs to be linked for both target and multi-architecture packages. +- `extraInstallCommands` + Additional commands to be executed for finalizing the derivation with runner script. +- `runScript` + A command that would be executed inside the sandbox and passed all the command line arguments. It defaults to `bash`. + +One can create a simple environment using a `shell.nix` like that: + +```nix +{ pkgs ? import <nixpkgs> {} }: + +(pkgs.buildFHSUserEnv { + name = "simple-x11-env"; + targetPkgs = pkgs: (with pkgs; + [ udev + alsaLib + ]) ++ (with pkgs.xorg; + [ libX11 + libXcursor + libXrandr + ]); + multiPkgs = pkgs: (with pkgs; + [ udev + alsaLib + ]); + runScript = "bash"; +}).env +``` + +Running `nix-shell` would then drop you into a shell with these libraries and binaries available. You can use this to run closed-source applications which expect FHS structure without hassles: simply change `runScript` to the application path, e.g. `./bin/start.sh` -- relative paths are supported. diff --git a/doc/builders/special/fhs-environments.xml b/doc/builders/special/fhs-environments.xml deleted file mode 100644 index e7b81e97a23f..000000000000 --- a/doc/builders/special/fhs-environments.xml +++ /dev/null @@ -1,122 +0,0 @@ -<section xmlns="http://docbook.org/ns/docbook" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:xi="http://www.w3.org/2001/XInclude" - xml:id="sec-fhs-environments"> - <title>buildFHSUserEnv</title> - - <para> - <function>buildFHSUserEnv</function> provides a way to build and run FHS-compatible lightweight sandboxes. It creates an isolated root with bound <filename>/nix/store</filename>, so its footprint in terms of disk space needed is quite small. This allows one to run software which is hard or unfeasible to patch for NixOS -- 3rd-party source trees with FHS assumptions, games distributed as tarballs, software with integrity checking and/or external self-updated binaries. It uses Linux namespaces feature to create temporary lightweight environments which are destroyed after all child processes exit, without root user rights requirement. Accepted arguments are: - </para> - - <variablelist> - <varlistentry> - <term> - <literal>name</literal> - </term> - <listitem> - <para> - Environment name. - </para> - </listitem> - </varlistentry> - <varlistentry> - <term> - <literal>targetPkgs</literal> - </term> - <listitem> - <para> - Packages to be installed for the main host's architecture (i.e. x86_64 on x86_64 installations). Along with libraries binaries are also installed. - </para> - </listitem> - </varlistentry> - <varlistentry> - <term> - <literal>multiPkgs</literal> - </term> - <listitem> - <para> - Packages to be installed for all architectures supported by a host (i.e. i686 and x86_64 on x86_64 installations). Only libraries are installed by default. - </para> - </listitem> - </varlistentry> - <varlistentry> - <term> - <literal>extraBuildCommands</literal> - </term> - <listitem> - <para> - Additional commands to be executed for finalizing the directory structure. - </para> - </listitem> - </varlistentry> - <varlistentry> - <term> - <literal>extraBuildCommandsMulti</literal> - </term> - <listitem> - <para> - Like <literal>extraBuildCommands</literal>, but executed only on multilib architectures. - </para> - </listitem> - </varlistentry> - <varlistentry> - <term> - <literal>extraOutputsToInstall</literal> - </term> - <listitem> - <para> - Additional derivation outputs to be linked for both target and multi-architecture packages. - </para> - </listitem> - </varlistentry> - <varlistentry> - <term> - <literal>extraInstallCommands</literal> - </term> - <listitem> - <para> - Additional commands to be executed for finalizing the derivation with runner script. - </para> - </listitem> - </varlistentry> - <varlistentry> - <term> - <literal>runScript</literal> - </term> - <listitem> - <para> - A command that would be executed inside the sandbox and passed all the command line arguments. It defaults to <literal>bash</literal>. - </para> - </listitem> - </varlistentry> - </variablelist> - - <para> - One can create a simple environment using a <literal>shell.nix</literal> like that: - </para> - -<programlisting><![CDATA[ -{ pkgs ? import <nixpkgs> {} }: - -(pkgs.buildFHSUserEnv { - name = "simple-x11-env"; - targetPkgs = pkgs: (with pkgs; - [ udev - alsaLib - ]) ++ (with pkgs.xorg; - [ libX11 - libXcursor - libXrandr - ]); - multiPkgs = pkgs: (with pkgs; - [ udev - alsaLib - ]); - runScript = "bash"; -}).env -]]></programlisting> - - <para> - Running <literal>nix-shell</literal> would then drop you into a shell with these libraries and binaries available. You can use this to run closed-source applications which expect FHS structure without hassles: simply change <literal>runScript</literal> to the application path, e.g. <filename>./bin/start.sh</filename> -- relative paths are supported. - </para> -</section> diff --git a/doc/builders/special/mkshell.section.md b/doc/builders/special/mkshell.section.md new file mode 100644 index 000000000000..1feb75cbd6f7 --- /dev/null +++ b/doc/builders/special/mkshell.section.md @@ -0,0 +1,15 @@ +# pkgs.mkShell {#sec-pkgs-mkShell} + +`pkgs.mkShell` is a special kind of derivation that is only useful when using it combined with `nix-shell`. It will in fact fail to instantiate when invoked with `nix-build`. + +## Usage {#sec-pkgs-mkShell-usage} + +```nix +{ pkgs ? import <nixpkgs> {} }: +pkgs.mkShell { + # this will make all the build inputs from hello and gnutar + # available to the shell environment + inputsFrom = with pkgs; [ hello gnutar ]; + buildInputs = [ pkgs.gnumake ]; +} +``` diff --git a/doc/builders/special/mkshell.xml b/doc/builders/special/mkshell.xml deleted file mode 100644 index cef65d06b882..000000000000 --- a/doc/builders/special/mkshell.xml +++ /dev/null @@ -1,24 +0,0 @@ -<section xmlns="http://docbook.org/ns/docbook" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:xi="http://www.w3.org/2001/XInclude" - xml:id="sec-pkgs-mkShell"> - <title>pkgs.mkShell</title> - - <para> - <function>pkgs.mkShell</function> is a special kind of derivation that is only useful when using it combined with <command>nix-shell</command>. It will in fact fail to instantiate when invoked with <command>nix-build</command>. - </para> - - <section xml:id="sec-pkgs-mkShell-usage"> - <title>Usage</title> - -<programlisting><![CDATA[ -{ pkgs ? import <nixpkgs> {} }: -pkgs.mkShell { - # this will make all the build inputs from hello and gnutar - # available to the shell environment - inputsFrom = with pkgs; [ hello gnutar ]; - buildInputs = [ pkgs.gnumake ]; -} -]]></programlisting> - </section> -</section> |