[Nix-dev] NixOS channel
Kevin Quick
quick at sparq.org
Tue Jun 19 17:08:44 CEST 2012
Hi Eelco,
Very interesting information regarding the channels. Can you give some
additional advice on how this relates to existing /etc/nixos/* checkouts?
* If I specify the channel and the nixos-rebuild you summarized below,
will it use the channel or my checkouts or both (and if the latter, which
has priority)?
* I currently have local packages in ~/.nix-defexpr. Specifically I have:
~/.nix-defexpr/localnix:
{}:
let
stdpkgs = import
/etc/nixos/nixpkgs/pkgs/top-level/all-packages.nix{};
mypkgs = builtins.getEnv "HOME" + "/my_nixexprs";
in
import mypkgs { inherit stdpkgs };
I can then populate personal packages in the mypkgs tree and they are
smoothly integrated for nix-env. Is it still possible to do this somehow
with the channel setup?
* As a corollary, is there documentation I could use that would provide
information on how to create a new channel containing mypkgs?
* Can you --add multiple channels?
* Can multiple channels cross-reference packages? Total
cross-referencing or backward-only?
* How are conflicts resolved with multiple channels?
Many Thanks,
-Kevin
On Tue, 15 May 2012 11:11:43 -0700, Eelco Dolstra
<eelco.dolstra at logicblox.com> wrote:
> Hi all,
>
> Since a few weeks there is a NixOS channel, which is now the default
> mechanism
> for keeping NixOS up to date. (A channel is a Nix mechanism for
> distributing a
> consistent set of Nix expressions and binaries.) A quick summary on how
> to use it:
>
> $ nix-channel --add
> http://nixos.org/releases/nixos/channels/nixos-unstable
> $ nix-channel --update
> $ nixos-rebuild switch
>
> The NixOS channel contains a copy of Nixpkgs (but only the binaries for
> i686-linux and x86_64-linux), so after "nix-channel --update" you can
> install
> packages via nix-env:
>
> $ nix-env -i thunderbird
>
> or, if you prefer the "-A" option:
>
> $ nix-env -iA nixos.pkgs.thunderbird
>
> The advantages of using a channel over the previous way (doing "svn up
> /etc/nixos/*" a.k.a. nixos-checkout) are:
>
> - Correctness: The channel is only updated to a new revision of
> NixOS/Nixpkgs if
> it passes certain tests - specifically, if all jobs in the
> "nixos:tested" view
> succeed (http://hydra.nixos.org/view/nixos/tested). So you have a
> reasonable
> certainty that the new version will actually work. By contrast, if you
> update
> to the latest revision using nixos-checkout, it's quite possible that
> somebody
> just committed something that broke the entire system.
>
> - Efficiency: The channel is only updated after all Hydra builds in that
> revision have finished, *and* all binaries have been mirrored. (Binary
> patches
> are generated asynchronously, however, since they can take much longer to
> produce.) So you don't have to worry about somebody just having
> committed
> something that causes a huge recompilation.
>
> This makes keeping NixOS up to date a rather more pleasant activity,
> IMHO.
>
> Some things to note:
>
> - The downloaded channel sources are stored in
> /nix/var/nix/profiles/per-user/root/channels/nixos (which is actually in
> the Nix
> store). The $NIX_PATH environment variable contains this directory, so
> <nixos>
> and <nixpkgs> in Nix expressions resolve there unless overriden through
> $NIX_PATH or the "-I" flag.
>
> - In principle, you can do rollbacks on the channels profile ("nix-env -p
> /nix/var/nix/profiles/per-user/root/channels --rollback") if you don't
> like the
> result of a "nix-channel --update". However, this doesn't roll back the
> corresponding binaries manifest in /nix/var/nix/manifest so its utility
> is
> limited [1].
>
> - The NixOS installation CD no longer contains or installs
> /etc/nixos/{nixos,nixpkgs} but instead uses the NixOS channel. You can
> of
> course run "nixos-checkout" if you want a working tree for development.
> (In
> other news, "nixos-checkout" now accepts a argument to specify the
> desired
> location of the working trees, e.g. "nixos-checkout /home/eelco/Dev".
> The
> default location /etc/nixos may eventually go away since it's a weird
> location
> for keeping large source trees.)
>
> - To use a development tree in nixos-rebuild, just use the -I flag, e.g.
> "nixos-rebuild switch -I /home/eelco/Dev".
>
> - The "nixpkgs_sys" link in ~/.nix-defexpr is no longer created.
> Instead you
> can use "nixos.pkgs" in "nix-env -iA" calls, as shown above.
> "nixos.pkgs" is
> the Nixpkgs in the NixOS channel, so it's guaranteed to have binaries
> available.
>
> - The command "nixos-version" prints out the NixOS version you're
> currently
> running, e.g. "0.1pre34067-34075". The version string include the NixOS
> and
> Nixpkgs revisions, respectively. If you install from SVN it just prints
> "0.1pre-svn".
>
> - Old versions can be installed from http://nixos.org/releases/nixos/.
> These
> are periodically deleted because they take up a lot of space. (Note
> that the
> nixos-unstable channel is really just a link to the latest NixOS
> release.)
>
> [1] In the future we may get rid of manifests, in which case the Right
> Thing
> would happen magically.
>
> tl;dr
>
--
-KQ
More information about the nix-dev
mailing list