[Nix-dev] nix-env --arg

raffalli at univ-savoie.fr raffalli at univ-savoie.fr
Fri Jun 14 10:12:25 CEST 2013


Hello,

> >If I first to "nix-env -i openssh --arg withKerberos false"
> >
> >and then "nix-env -i openssh --arg withKerberos true"
> >
> >Then openssh is not replaced. It seems that the hash do not depends on argument ?
> >How can I fix this ?
> 
> I think that "nix-env -iA openssh --arg withKerberos false" should
> be the way. IMO --arg only makes sense with attribute paths.

I failed to do that too. I think I am doing something wrong. I attach
my modify version of openssh/default.nix.

Note: I made the name depend on the value of withKerberos to see what I am doing.

If I create a specific entry for openssh with kerberos in all_packages.nix, it works.
(i.e. nix-env -iA openssKrb5 works)

If I try to install via nix-env -iA openssh --arg withKerberos false, the variable withKerberos
is not transmitted.

Here is also the piece of definition I have in all_packages.nix:

 
> >Another related question: how should we make this kind of options visible from the end user ?
> >Adding something in all-packages.nix ?
> 
> One could add the other version to all-packages.nix, but that's
> probably redundant. Most people will be satisfied by a well-chosen
> default, and the rest can override it in ~/.nixpkgs/config.nix or
> similar.

I did not bind how to do that. The examples I found via google were all about 
compilation environment, not configuration of package, so I failed to guess what to add
in ~/.nixpkgs/config.nix

And by the way, I prefer a systeme wide installation of openssh, so I would prefer to add
something in /etc/nixos ?

Thanks for the help,
Christophe
-------------- next part --------------
{ stdenv, fetchurl, zlib, openssl, perl, libedit, pkgconfig, pam
, etcDir ? null
, hpnSupport ? false
, withKerberos ? false
, kerberos
}:

assert withKerberos -> kerberos != null;

let

  hpnSrc = fetchurl {
    url = http://nixos.org/tarballs/openssh-6.1p1-hpn13v14.diff.gz;
    sha256 = "14das6lim6fxxnx887ssw76ywsbvx3s4q3n43afgh5rgvs4xmnnq";
  };

in

stdenv.mkDerivation rec {
  basename = "openssh-6.2p1";
  # just temporary, to see what I am doing
  name = basename + (if withKerberos then "-krb5" else "");

  src = fetchurl {
    url = "ftp://ftp.nl.uu.net/pub/OpenBSD/OpenSSH/portable/${basename}.tar.gz";
    sha1 = "8824708c617cc781b2bb29fa20bd905fd3d2a43d";
  };

  prePatch = stdenv.lib.optionalString hpnSupport
    ''
      gunzip -c ${hpnSrc} | patch -p1
      export NIX_LDFLAGS="$NIX_LDFLAGS -lgcc_s"
    '';

  patches =
    [ ./locale_archive.patch
      # Upstream fix for gratuitous "no such identity" warnings.
      ./fix-identity-warnings.patch
    ];

  buildInputs = [ zlib openssl libedit pkgconfig pam ] ++
    (if withKerberos then [ kerberos ] else [])
  ;

  # I set --disable-strip because later we strip anyway. And it fails to strip
  # properly when cross building.
  configureFlags =
    ''
      --with-mantype=man
      --with-libedit=yes
      --disable-strip
      ${if pam != null then "--with-pam" else "--without-pam"}
      ${if etcDir != null then "--sysconfdir=${etcDir}" else ""}
      ${if withKerberos  then "--with-kerberos5=${kerberos}" else ""}
    '';

  preConfigure =
    ''
      configureFlags="$configureFlags --with-privsep-path=$out/empty"
      mkdir -p $out/empty
    '';

  postInstall =
    ''
      # Install ssh-copy-id, it's very useful.
      cp contrib/ssh-copy-id $out/bin/
      chmod +x $out/bin/ssh-copy-id
      cp contrib/ssh-copy-id.1 $out/share/man/man1/

      mkdir -p $out/etc/ssh
      cp moduli $out/etc/ssh/
    '';

  installTargets = "install-nosysconf";

  meta = {
    homepage = http://www.openssh.org/;
    description = "An implementation of the SSH protocol";
    license = "bsd";
    platforms = stdenv.lib.platforms.linux;
    maintainers = stdenv.lib.maintainers.eelco;
  };
}


More information about the nix-dev mailing list