aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flake.lock6
-rw-r--r--flake.nix468
-rw-r--r--release-common.nix80
-rw-r--r--release.nix396
-rw-r--r--shell.nix28
-rw-r--r--tests/github-flakes.nix12
-rw-r--r--tests/nix-copy-closure.nix9
-rw-r--r--tests/remote-builds.nix9
-rw-r--r--tests/setuid.nix8
9 files changed, 476 insertions, 540 deletions
diff --git a/flake.lock b/flake.lock
index 70a433b26..05e3a6e25 100644
--- a/flake.lock
+++ b/flake.lock
@@ -2,9 +2,9 @@
"inputs": {
"nixpkgs": {
"inputs": {},
- "narHash": "sha256-HGlE2VNbdEjCP76hWAS72kHBlMWhpvqWo58Obg1Vy6s=",
- "originalUri": "nixpkgs",
- "uri": "github:edolstra/nixpkgs/13e1bce51f4aebdf3db58ce8c4a93e904a272bff"
+ "narHash": "sha256-ltGlDPfwicH/u4orj1n4JXgRsA+jvKQsGnekObi0TV4=",
+ "originalUri": "nixpkgs/release-19.03",
+ "uri": "github:edolstra/nixpkgs/9a593b575e4044f9aff939b512e7cb1cf1e76a65"
}
},
"version": 3
diff --git a/flake.nix b/flake.nix
index f0d928494..220b6d8c5 100644
--- a/flake.nix
+++ b/flake.nix
@@ -3,27 +3,461 @@
edition = 201909;
- outputs = { self, nixpkgs }: rec {
+ inputs.nixpkgs.uri = "nixpkgs/release-19.03";
- hydraJobs = import ./release.nix {
- nix = self;
- nixpkgs = nixpkgs;
- };
+ outputs = { self, nixpkgs }:
- checks = {
- binaryTarball = hydraJobs.binaryTarball.x86_64-linux;
- perlBindings = hydraJobs.perlBindings.x86_64-linux;
- };
+ let
- packages = {
- nix = hydraJobs.build.x86_64-linux;
- nix-perl-bindings = hydraJobs.perlBindings.x86_64-linux;
- };
+ officialRelease = false;
- defaultPackage = packages.nix;
+ systems = [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ];
+
+ # Memoize nixpkgs for different platforms for efficiency.
+ nixpkgsFor = nixpkgs.lib.genAttrs systems (system:
+ import nixpkgs {
+ inherit system;
+ overlays = [ self.overlay ];
+ }
+ );
+
+ commonDeps = pkgs: with pkgs; rec {
+ # Use "busybox-sandbox-shell" if present,
+ # if not (legacy) fallback and hope it's sufficient.
+ sh = pkgs.busybox-sandbox-shell or (busybox.override {
+ useMusl = true;
+ enableStatic = true;
+ enableMinimal = true;
+ extraConfig = ''
+ CONFIG_FEATURE_FANCY_ECHO y
+ CONFIG_FEATURE_SH_MATH y
+ CONFIG_FEATURE_SH_MATH_64 y
+
+ CONFIG_ASH y
+ CONFIG_ASH_OPTIMIZE_FOR_SIZE y
+
+ CONFIG_ASH_ALIAS y
+ CONFIG_ASH_BASH_COMPAT y
+ CONFIG_ASH_CMDCMD y
+ CONFIG_ASH_ECHO y
+ CONFIG_ASH_GETOPTS y
+ CONFIG_ASH_INTERNAL_GLOB y
+ CONFIG_ASH_JOB_CONTROL y
+ CONFIG_ASH_PRINTF y
+ CONFIG_ASH_TEST y
+ '';
+ });
+
+ configureFlags =
+ [
+ "--enable-gc"
+ ] ++ lib.optionals stdenv.isLinux [
+ "--with-sandbox-shell=${sh}/bin/busybox"
+ ];
+
+ tarballDeps =
+ [ bison
+ flex
+ libxml2
+ libxslt
+ docbook5
+ docbook_xsl_ns
+ autoconf-archive
+ autoreconfHook
+ ];
+
+ buildDeps =
+ [ curl
+ bzip2 xz brotli editline
+ openssl pkgconfig sqlite boehmgc
+ boost
+
+ # Tests
+ git
+ mercurial
+ jq
+ ]
+ ++ lib.optionals stdenv.isLinux [libseccomp utillinuxMinimal]
+ ++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
+ ++ lib.optional (stdenv.isLinux || stdenv.isDarwin)
+ (aws-sdk-cpp.override {
+ apis = ["s3" "transfer"];
+ customMemoryManagement = false;
+ });
+
+ perlDeps =
+ [ perl
+ perlPackages.DBDSQLite
+ ];
+ };
+
+ in {
+
+ # A Nixpkgs overlay that overrides the 'nix' and 'nix-perl'
+ # packages.
+ overlay = final: prev: {
+
+ nix = with final; with commonDeps pkgs; releaseTools.nixBuild {
+ name = "nix";
+ src = self.hydraJobs.tarball;
+
+ buildInputs = buildDeps;
+
+ preConfigure =
+ # Copy libboost_context so we don't get all of Boost in our closure.
+ # https://github.com/NixOS/nixpkgs/issues/45462
+ ''
+ mkdir -p $out/lib
+ cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
+ rm -f $out/lib/*.a
+ ${lib.optionalString stdenv.isLinux ''
+ chmod u+w $out/lib/*.so.*
+ patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
+ ''}
+ '';
+
+ configureFlags = configureFlags ++
+ [ "--sysconfdir=/etc" ];
+
+ enableParallelBuilding = true;
+
+ makeFlags = "profiledir=$(out)/etc/profile.d";
+
+ installFlags = "sysconfdir=$(out)/etc";
+
+ doInstallCheck = true;
+ installCheckFlags = "sysconfdir=$(out)/etc";
+ };
+
+ nix-perl = with final; releaseTools.nixBuild {
+ name = "nix-perl";
+ src = self.hydraJobs.tarball;
+
+ buildInputs =
+ [ nix curl bzip2 xz pkgconfig pkgs.perl boost ]
+ ++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium;
+
+ configureFlags = ''
+ --with-dbi=${perlPackages.DBI}/${pkgs.perl.libPrefix}
+ --with-dbd-sqlite=${perlPackages.DBDSQLite}/${pkgs.perl.libPrefix}
+ '';
+
+ enableParallelBuilding = true;
+
+ postUnpack = "sourceRoot=$sourceRoot/perl";
+ };
+
+ };
+
+ hydraJobs = {
+
+ # Source tarball.
+ tarball =
+ with nixpkgsFor.x86_64-linux;
+ with commonDeps pkgs;
+
+ releaseTools.sourceTarball {
+ name = "nix-tarball";
+ version = builtins.readFile ./.version;
+ versionSuffix = if officialRelease then "" else
+ "pre${builtins.substring 0 8 self.lastModified}_${self.shortRev}";
+ src = self;
+ inherit officialRelease;
+
+ buildInputs = tarballDeps ++ buildDeps;
+
+ configureFlags = "--enable-gc";
+
+ postUnpack = ''
+ (cd $sourceRoot && find . -type f) | cut -c3- > $sourceRoot/.dist-files
+ cat $sourceRoot/.dist-files
+ '';
+
+ preConfigure = ''
+ (cd perl ; autoreconf --install --force --verbose)
+ # TeX needs a writable font cache.
+ export VARTEXFONTS=$TMPDIR/texfonts
+ '';
+
+ distPhase =
+ ''
+ runHook preDist
+ make dist
+ mkdir -p $out/tarballs
+ cp *.tar.* $out/tarballs
+ '';
+
+ preDist = ''
+ make install docdir=$out/share/doc/nix makefiles=doc/manual/local.mk
+ echo "doc manual $out/share/doc/nix/manual" >> $out/nix-support/hydra-build-products
+ '';
+ };
+
+ # Binary package for various platforms.
+ build = nixpkgs.lib.genAttrs systems (system: nixpkgsFor.${system}.nix);
+
+ # Perl bindings for various platforms.
+ perlBindings = nixpkgs.lib.genAttrs systems (system: nixpkgsFor.${system}.nix-perl);
+
+ # Binary tarball for various platforms, containing a Nix store
+ # with the closure of 'nix' package, and the second half of
+ # the installation script.
+ binaryTarball = nixpkgs.lib.genAttrs systems (system:
+
+ with nixpkgsFor.${system};
+
+ let
+ version = nix.src.version;
+ installerClosureInfo = closureInfo { rootPaths = [ nix cacert ]; };
+ in
+
+ runCommand "nix-binary-tarball-${version}"
+ { nativeBuildInputs = lib.optional (system != "aarch64-linux") shellcheck;
+ meta.description = "Distribution-independent Nix bootstrap binaries for ${system}";
+ }
+ ''
+ cp ${installerClosureInfo}/registration $TMPDIR/reginfo
+ substitute ${./scripts/install-nix-from-closure.sh} $TMPDIR/install \
+ --subst-var-by nix ${nix} \
+ --subst-var-by cacert ${cacert}
+
+ substitute ${./scripts/install-darwin-multi-user.sh} $TMPDIR/install-darwin-multi-user.sh \
+ --subst-var-by nix ${nix} \
+ --subst-var-by cacert ${cacert}
+ substitute ${./scripts/install-systemd-multi-user.sh} $TMPDIR/install-systemd-multi-user.sh \
+ --subst-var-by nix ${nix} \
+ --subst-var-by cacert ${cacert}
+ substitute ${./scripts/install-multi-user.sh} $TMPDIR/install-multi-user \
+ --subst-var-by nix ${nix} \
+ --subst-var-by cacert ${cacert}
+
+ if type -p shellcheck; then
+ # SC1090: Don't worry about not being able to find
+ # $nix/etc/profile.d/nix.sh
+ shellcheck --exclude SC1090 $TMPDIR/install
+ shellcheck $TMPDIR/install-darwin-multi-user.sh
+ shellcheck $TMPDIR/install-systemd-multi-user.sh
+
+ # SC1091: Don't panic about not being able to source
+ # /etc/profile
+ # SC2002: Ignore "useless cat" "error", when loading
+ # .reginfo, as the cat is a much cleaner
+ # implementation, even though it is "useless"
+ # SC2116: Allow ROOT_HOME=$(echo ~root) for resolving
+ # root's home directory
+ shellcheck --external-sources \
+ --exclude SC1091,SC2002,SC2116 $TMPDIR/install-multi-user
+ fi
+
+ chmod +x $TMPDIR/install
+ chmod +x $TMPDIR/install-darwin-multi-user.sh
+ chmod +x $TMPDIR/install-systemd-multi-user.sh
+ chmod +x $TMPDIR/install-multi-user
+ dir=nix-${version}-${system}
+ fn=$out/$dir.tar.xz
+ mkdir -p $out/nix-support
+ echo "file binary-dist $fn" >> $out/nix-support/hydra-build-products
+ tar cvfJ $fn \
+ --owner=0 --group=0 --mode=u+rw,uga+r \
+ --absolute-names \
+ --hard-dereference \
+ --transform "s,$TMPDIR/install,$dir/install," \
+ --transform "s,$TMPDIR/reginfo,$dir/.reginfo," \
+ --transform "s,$NIX_STORE,$dir/store,S" \
+ $TMPDIR/install $TMPDIR/install-darwin-multi-user.sh \
+ $TMPDIR/install-systemd-multi-user.sh \
+ $TMPDIR/install-multi-user $TMPDIR/reginfo \
+ $(cat ${installerClosureInfo}/store-paths)
+ '');
+
+ # The first half of the installation script. This is uploaded
+ # to https://nixos.org/nix/install. It downloads the binary
+ # tarball for the user's system and calls the second half of the
+ # installation script.
+ installerScript =
+ with nixpkgsFor.x86_64-linux;
+ runCommand "installer-script"
+ { buildInputs = [ nix ];
+ }
+ ''
+ mkdir -p $out/nix-support
+
+ substitute ${./scripts/install.in} $out/install \
+ ${pkgs.lib.concatMapStrings
+ (system: "--replace '@binaryTarball_${system}@' $(nix hash-file --base16 --type sha256 ${self.hydraJobs.binaryTarball.${system}}/*.tar.xz) ")
+ [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ]
+ } \
+ --replace '@nixVersion@' ${nix.src.version}
+
+ echo "file installer $out/install" >> $out/nix-support/hydra-build-products
+ '';
+
+ # Line coverage analysis.
+ coverage =
+ with nixpkgsFor.x86_64-linux;
+ with commonDeps pkgs;
+
+ releaseTools.coverageAnalysis {
+ name = "nix-build";
+ src = self.hydraJobs.tarball;
+
+ buildInputs = buildDeps;
+
+ dontInstall = false;
+
+ doInstallCheck = true;
+
+ lcovFilter = [ "*/boost/*" "*-tab.*" "*/nlohmann/*" "*/linenoise/*" ];
+
+ # We call `dot', and even though we just use it to
+ # syntax-check generated dot files, it still requires some
+ # fonts. So provide those.
+ FONTCONFIG_FILE = texFunctions.fontsConf;
+ };
+
+ # System tests.
+ tests.remoteBuilds = import ./tests/remote-builds.nix {
+ system = "x86_64-linux";
+ inherit nixpkgs;
+ inherit (self) overlay;
+ };
+
+ tests.nix-copy-closure = import ./tests/nix-copy-closure.nix {
+ system = "x86_64-linux";
+ inherit nixpkgs;
+ inherit (self) overlay;
+ };
+
+ tests.githubFlakes = (import ./tests/github-flakes.nix rec {
+ system = "x86_64-linux";
+ inherit nixpkgs;
+ inherit (self) overlay;
+ });
+
+ tests.setuid = nixpkgs.lib.genAttrs
+ ["i686-linux" "x86_64-linux"]
+ (system:
+ import ./tests/setuid.nix rec {
+ inherit nixpkgs system;
+ inherit (self) overlay;
+ });
+
+ # Test whether the binary tarball works in an Ubuntu system.
+ tests.binaryTarball =
+ with nixpkgsFor.x86_64-linux;
+ vmTools.runInLinuxImage (runCommand "nix-binary-tarball-test"
+ { diskImage = vmTools.diskImages.ubuntu1204x86_64;
+ }
+ ''
+ set -x
+ useradd -m alice
+ su - alice -c 'tar xf ${self.hydraJobs.binaryTarball.x86_64-linux}/*.tar.*'
+ mkdir /dest-nix
+ mount -o bind /dest-nix /nix # Provide a writable /nix.
+ chown alice /nix
+ su - alice -c '_NIX_INSTALLER_TEST=1 ./nix-*/install'
+ su - alice -c 'nix-store --verify'
+ su - alice -c 'PAGER= nix-store -qR ${self.hydraJobs.build.x86_64-linux}'
+
+ # Check whether 'nix upgrade-nix' works.
+ cat > /tmp/paths.nix <<EOF
+ {
+ x86_64-linux = "${self.hydraJobs.build.x86_64-linux}";
+ }
+ EOF
+ su - alice -c 'nix upgrade-nix -vvv --nix-store-paths-url file:///tmp/paths.nix'
+ (! [ -L /home/alice/.profile-1-link ])
+ su - alice -c 'PAGER= nix-store -qR ${self.hydraJobs.build.x86_64-linux}'
+
+ mkdir -p $out/nix-support
+ touch $out/nix-support/hydra-build-products
+ umount /nix
+ '');
+
+ # Check whether we can still evaluate all of Nixpkgs.
+ tests.evalNixpkgs =
+ import (nixpkgs + "/pkgs/top-level/make-tarball.nix") {
+ # FIXME: fix pkgs/top-level/make-tarball.nix in NixOS to not require a revCount.
+ inherit nixpkgs;
+ pkgs = nixpkgsFor.x86_64-linux;
+ officialRelease = false;
+ };
+
+ # Check whether we can still evaluate NixOS.
+ tests.evalNixOS =
+ with nixpkgsFor.x86_64-linux;
+ runCommand "eval-nixos" { buildInputs = [ nix ]; }
+ ''
+ export NIX_STATE_DIR=$TMPDIR
+
+ nix-instantiate ${nixpkgs}/nixos/release-combined.nix -A tested --dry-run \
+ --arg nixpkgs '{ outPath = ${nixpkgs}; revCount = 123; shortRev = "abcdefgh"; }'
+
+ touch $out
+ '';
+
+ # Aggregate job containing the release-critical jobs.
+ release =
+ with self.hydraJobs;
+ nixpkgsFor.x86_64-linux.releaseTools.aggregate {
+ name = "nix-${tarball.version}";
+ meta.description = "Release-critical builds";
+ constituents =
+ [ tarball
+ build.i686-linux
+ build.x86_64-darwin
+ build.x86_64-linux
+ build.aarch64-linux
+ binaryTarball.i686-linux
+ binaryTarball.x86_64-darwin
+ binaryTarball.x86_64-linux
+ binaryTarball.aarch64-linux
+ tests.remoteBuilds
+ tests.nix-copy-closure
+ tests.binaryTarball
+ tests.evalNixpkgs
+ tests.evalNixOS
+ installerScript
+ ];
+ };
+
+ };
+
+ checks = {
+ binaryTarball = self.hydraJobs.binaryTarball.x86_64-linux;
+ perlBindings = self.hydraJobs.perlBindings.x86_64-linux;
+ };
+
+ packages = {
+ inherit (nixpkgsFor.x86_64-linux) nix nix-perl;
+ };
+
+ defaultPackage = self.packages.nix;
+
+ devShell =
+ with nixpkgsFor.x86_64-linux;
+ with commonDeps pkgs;
+
+ stdenv.mkDerivation {
+ name = "nix";
+
+ buildInputs = buildDeps ++ tarballDeps ++ perlDeps;
+
+ inherit configureFlags;
+
+ enableParallelBuilding = true;
+
+ installFlags = "sysconfdir=$(out)/etc";
+
+ shellHook =
+ ''
+ export prefix=$(pwd)/inst
+ configureFlags+=" --prefix=$prefix"
+ PKG_CONFIG_PATH=$prefix/lib/pkgconfig:$PKG_CONFIG_PATH
+ PATH=$prefix/bin:$PATH
+ unset PYTHONPATH
+ '';
+ };
- devShell = import ./shell.nix {
- inherit nixpkgs;
- };
};
}
diff --git a/release-common.nix b/release-common.nix
deleted file mode 100644
index f103b52b5..000000000
--- a/release-common.nix
+++ /dev/null
@@ -1,80 +0,0 @@
-{ pkgs }:
-
-with pkgs;
-
-rec {
- # Use "busybox-sandbox-shell" if present,
- # if not (legacy) fallback and hope it's sufficient.
- sh = pkgs.busybox-sandbox-shell or (busybox.override {
- useMusl = true;
- enableStatic = true;
- enableMinimal = true;
- extraConfig = ''
- CONFIG_FEATURE_FANCY_ECHO y
- CONFIG_FEATURE_SH_MATH y
- CONFIG_FEATURE_SH_MATH_64 y
-
- CONFIG_ASH y
- CONFIG_ASH_OPTIMIZE_FOR_SIZE y
-
- CONFIG_ASH_ALIAS y
- CONFIG_ASH_BASH_COMPAT y
- CONFIG_ASH_CMDCMD y
- CONFIG_ASH_ECHO y
- CONFIG_ASH_GETOPTS y
- CONFIG_ASH_INTERNAL_GLOB y
- CONFIG_ASH_JOB_CONTROL y
- CONFIG_ASH_PRINTF y
- CONFIG_ASH_TEST y
- '';
- });
-
- configureFlags =
- [
- "--enable-gc"
- ] ++ lib.optionals stdenv.isLinux [
- "--with-sandbox-shell=${sh}/bin/busybox"
- ];
-
- tarballDeps =
- [ bison
- flex
- libxml2
- libxslt
- docbook5
- docbook_xsl_ns
- autoconf-archive
- autoreconfHook
- ];
-
- buildDeps =
- [ curl
- bzip2 xz brotli editline
- openssl pkgconfig sqlite boehmgc
- boost
-
- # Tests
- git
- mercurial
- jq
- ]
- ++ lib.optionals stdenv.isLinux [libseccomp utillinuxMinimal]
- ++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium
- ++ lib.optional (stdenv.isLinux || stdenv.isDarwin)
- ((aws-sdk-cpp.override {
- apis = ["s3" "transfer"];
- customMemoryManagement = false;
- }).overrideDerivation (args: {
- /*
- patches = args.patches or [] ++ [ (fetchpatch {
- url = https://github.com/edolstra/aws-sdk-cpp/commit/3e07e1f1aae41b4c8b340735ff9e8c735f0c063f.patch;
- sha256 = "1pij0v449p166f9l29x7ppzk8j7g9k9mp15ilh5qxp29c7fnvxy2";
- }) ];
- */
- }));
-
- perlDeps =
- [ perl
- perlPackages.DBDSQLite
- ];
-}
diff --git a/release.nix b/release.nix
deleted file mode 100644
index d38d3819a..000000000
--- a/release.nix
+++ /dev/null
@@ -1,396 +0,0 @@
-{ nix ? builtins.fetchGit ./.
-, nixpkgs ? builtins.fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-19.03.tar.gz
-, officialRelease ? false
-, systems ? [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ]
-}:
-
-let
-
- pkgs = import nixpkgs { system = builtins.currentSystem or "x86_64-linux"; };
-
- jobs = rec {
-
-
- tarball =
- with pkgs;
-
- with import ./release-common.nix { inherit pkgs; };
-
- releaseTools.sourceTarball {
- name = "nix-tarball";
- version = builtins.readFile ./.version;
- versionSuffix = if officialRelease then "" else
- "pre${if nix ? lastModified then builtins.substring 0 8 nix.lastModified else toString nix.revCount or 0}_${nix.shortRev or "0000000"}";
- src = nix;
- inherit officialRelease;
-
- buildInputs = tarballDeps ++ buildDeps;
-
- configureFlags = "--enable-gc";
-
- postUnpack = ''
- (cd $sourceRoot && find . -type f) | cut -c3- > $sourceRoot/.dist-files
- cat $sourceRoot/.dist-files
- '';
-
- preConfigure = ''
- (cd perl ; autoreconf --install --force --verbose)
- # TeX needs a writable font cache.
- export VARTEXFONTS=$TMPDIR/texfonts
- '';
-
- distPhase =
- ''
- runHook preDist
- make dist
- mkdir -p $out/tarballs
- cp *.tar.* $out/tarballs
- '';
-
- preDist = ''
- make install docdir=$out/share/doc/nix makefiles=doc/manual/local.mk
- echo "doc manual $out/share/doc/nix/manual" >> $out/nix-support/hydra-build-products
- '';
- };
-
-
- build = pkgs.lib.genAttrs systems (system:
-
- let pkgs = import nixpkgs { inherit system; }; in
-
- with pkgs;
-
- with import ./release-common.nix { inherit pkgs; };
-
- releaseTools.nixBuild {
- name = "nix";
- src = tarball;
-
- buildInputs = buildDeps;
-
- preConfigure =
- # Copy libboost_context so we don't get all of Boost in our closure.
- # https://github.com/NixOS/nixpkgs/issues/45462
- ''
- mkdir -p $out/lib
- cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
- rm -f $out/lib/*.a
- ${lib.optionalString stdenv.isLinux ''
- chmod u+w $out/lib/*.so.*
- patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
- ''}
- '';
-
- configureFlags = configureFlags ++
- [ "--sysconfdir=/etc" ];
-
- enableParallelBuilding = true;
-
- makeFlags = "profiledir=$(out)/etc/profile.d";
-
- installFlags = "sysconfdir=$(out)/etc";
-
- doInstallCheck = true;
- installCheckFlags = "sysconfdir=$(out)/etc";
- });
-
-
- perlBindings = pkgs.lib.genAttrs systems (system:
-
- let pkgs = import nixpkgs { inherit system; }; in with pkgs;
-
- releaseTools.nixBuild {
- name = "nix-perl";
- src = tarball;
-
- buildInputs =
- [ jobs.build.${system} curl bzip2 xz pkgconfig pkgs.perl boost ]
- ++ lib.optional (stdenv.isLinux || stdenv.isDarwin) libsodium;
-
- configureFlags = ''
- --with-dbi=${perlPackages.DBI}/${pkgs.perl.libPrefix}
- --with-dbd-sqlite=${perlPackages.DBDSQLite}/${pkgs.perl.libPrefix}
- '';
-
- enableParallelBuilding = true;
-
- postUnpack = "sourceRoot=$sourceRoot/perl";
- });
-
-
- binaryTarball = pkgs.lib.genAttrs systems (system:
-
- with import nixpkgs { inherit system; };
-
- let
- toplevel = builtins.getAttr system jobs.build;
- version = toplevel.src.version;
- installerClosureInfo = closureInfo { rootPaths = [ toplevel cacert ]; };
- in
-
- runCommand "nix-binary-tarball-${version}"
- { nativeBuildInputs = lib.optional (system != "aarch64-linux") shellcheck;
- meta.description = "Distribution-independent Nix bootstrap binaries for ${system}";
- }
- ''
- cp ${installerClosureInfo}/registration $TMPDIR/reginfo
- substitute ${./scripts/install-nix-from-closure.sh} $TMPDIR/install \
- --subst-var-by nix ${toplevel} \
- --subst-var-by cacert ${cacert}
-
- substitute ${./scripts/install-darwin-multi-user.sh} $TMPDIR/install-darwin-multi-user.sh \
- --subst-var-by nix ${toplevel} \
- --subst-var-by cacert ${cacert}
- substitute ${./scripts/install-systemd-multi-user.sh} $TMPDIR/install-systemd-multi-user.sh \
- --subst-var-by nix ${toplevel} \
- --subst-var-by cacert ${cacert}
- substitute ${./scripts/install-multi-user.sh} $TMPDIR/install-multi-user \
- --subst-var-by nix ${toplevel} \
- --subst-var-by cacert ${cacert}
-
- if type -p shellcheck; then
- # SC1090: Don't worry about not being able to find
- # $nix/etc/profile.d/nix.sh
- shellcheck --exclude SC1090 $TMPDIR/install
- shellcheck $TMPDIR/install-darwin-multi-user.sh
- shellcheck $TMPDIR/install-systemd-multi-user.sh
-
- # SC1091: Don't panic about not being able to source
- # /etc/profile
- # SC2002: Ignore "useless cat" "error", when loading
- # .reginfo, as the cat is a much cleaner
- # implementation, even though it is "useless"
- # SC2116: Allow ROOT_HOME=$(echo ~root) for resolving
- # root's home directory
- shellcheck --external-sources \
- --exclude SC1091,SC2002,SC2116 $TMPDIR/install-multi-user
- fi
-
- chmod +x $TMPDIR/install
- chmod +x $TMPDIR/install-darwin-multi-user.sh
- chmod +x $TMPDIR/install-systemd-multi-user.sh
- chmod +x $TMPDIR/install-multi-user
- dir=nix-${version}-${system}
- fn=$out/$dir.tar.xz
- mkdir -p $out/nix-support
- echo "file binary-dist $fn" >> $out/nix-support/hydra-build-products
- tar cvfJ $fn \
- --owner=0 --group=0 --mode=u+rw,uga+r \
- --absolute-names \
- --hard-dereference \
- --transform "s,$TMPDIR/install,$dir/install," \
- --transform "s,$TMPDIR/reginfo,$dir/.reginfo," \
- --transform "s,$NIX_STORE,$dir/store,S" \
- $TMPDIR/install $TMPDIR/install-darwin-multi-user.sh \
- $TMPDIR/install-systemd-multi-user.sh \
- $TMPDIR/install-multi-user $TMPDIR/reginfo \
- $(cat ${installerClosureInfo}/store-paths)
- '');
-
-
- coverage =
- with pkgs;
-
- with import ./release-common.nix { inherit pkgs; };
-
- releaseTools.coverageAnalysis {
- name = "nix-build";
- src = tarball;
-
- buildInputs = buildDeps;
-
- dontInstall = false;
-
- doInstallCheck = true;
-
- lcovFilter = [ "*/boost/*" "*-tab.*" "*/nlohmann/*" "*/linenoise/*" ];
-
- # We call `dot', and even though we just use it to
- # syntax-check generated dot files, it still requires some
- # fonts. So provide those.
- FONTCONFIG_FILE = texFunctions.fontsConf;
- };
-
-
- #rpm_fedora27x86_64 = makeRPM_x86_64 (diskImageFunsFun: diskImageFunsFun.fedora27x86_64) [ ];
-
-
- #deb_debian8i386 = makeDeb_i686 (diskImageFuns: diskImageFuns.debian8i386) [ "libsodium-dev" ] [ "libsodium13" ];
- #deb_debian8x86_64 = makeDeb_x86_64 (diskImageFunsFun: diskImageFunsFun.debian8x86_64) [ "libsodium-dev" ] [ "libsodium13" ];
-
- #deb_ubuntu1710i386 = makeDeb_i686 (diskImageFuns: diskImageFuns.ubuntu1710i386) [ ] [ "libsodium18" ];
- #deb_ubuntu1710x86_64 = makeDeb_x86_64 (diskImageFuns: diskImageFuns.ubuntu1710x86_64) [ ] [ "libsodium18" "libboost-context1.62.0" ];
-
-
- # System tests.
- tests.remoteBuilds = (import ./tests/remote-builds.nix rec {
- inherit nixpkgs;
- nix = build.x86_64-linux; system = "x86_64-linux";
- });
-
- tests.nix-copy-closure = (import ./tests/nix-copy-closure.nix rec {
- inherit nixpkgs;
- nix = build.x86_64-linux; system = "x86_64-linux";
- });
-
- tests.githubFlakes = (import ./tests/github-flakes.nix rec {
- inherit nixpkgs;
- nix = build.x86_64-linux; system = "x86_64-linux";
- });
-
- tests.setuid = pkgs.lib.genAttrs
- ["i686-linux" "x86_64-linux"]
- (system:
- import ./tests/setuid.nix rec {
- inherit nixpkgs;
- nix = build.${system}; inherit system;
- });
-
- tests.binaryTarball =
- with import nixpkgs { system = "x86_64-linux"; };
- vmTools.runInLinuxImage (runCommand "nix-binary-tarball-test"
- { diskImage = vmTools.diskImages.ubuntu1204x86_64;
- }
- ''
- set -x
- useradd -m alice
- su - alice -c 'tar xf ${binaryTarball.x86_64-linux}/*.tar.*'
- mkdir /dest-nix
- mount -o bind /dest-nix /nix # Provide a writable /nix.
- chown alice /nix
- su - alice -c '_NIX_INSTALLER_TEST=1 ./nix-*/install'
- su - alice -c 'nix-store --verify'
- su - alice -c 'PAGER= nix-store -qR ${build.x86_64-linux}'
-
- # Check whether 'nix upgrade-nix' works.
- cat > /tmp/paths.nix <<EOF
- {
- x86_64-linux = "${build.x86_64-linux}";
- }
- EOF
- su - alice -c 'nix upgrade-nix -vvv --nix-store-paths-url file:///tmp/paths.nix'
- (! [ -L /home/alice/.profile-1-link ])
- su - alice -c 'PAGER= nix-store -qR ${build.x86_64-linux}'
-
- mkdir -p $out/nix-support
- touch $out/nix-support/hydra-build-products
- umount /nix
- ''); # */
-
- tests.evalNixpkgs =
- import (nixpkgs + "/pkgs/top-level/make-tarball.nix") {
- # FIXME: fix pkgs/top-level/make-tarball.nix in NixOS to not require a revCount.
- nixpkgs = nixpkgs // { revCount = 0; };
- inherit pkgs;
- nix = build.x86_64-linux;
- officialRelease = false;
- };
-
- tests.evalNixOS =
- pkgs.runCommand "eval-nixos" { buildInputs = [ build.x86_64-linux ]; }
- ''
- export NIX_STATE_DIR=$TMPDIR
-
- nix-instantiate ${nixpkgs}/nixos/release-combined.nix -A tested --dry-run \
- --arg nixpkgs '{ outPath = ${nixpkgs}; revCount = 123; shortRev = "abcdefgh"; }'
-
- touch $out
- '';
-
-
- installerScript =
- pkgs.runCommand "installer-script"
- { buildInputs = [ build.x86_64-linux ];
- }
- ''
- mkdir -p $out/nix-support
-
- substitute ${./scripts/install.in} $out/install \
- ${pkgs.lib.concatMapStrings
- (system: "--replace '@binaryTarball_${system}@' $(nix hash-file --base16 --type sha256 ${binaryTarball.${system}}/*.tar.xz) ")
- [ "x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" ]
- } \
- --replace '@nixVersion@' ${build.x86_64-linux.src.version}
-
- echo "file installer $out/install" >> $out/nix-support/hydra-build-products
- '';
-
-
- # Aggregate job containing the release-critical jobs.
- release = pkgs.releaseTools.aggregate {
- name = "nix-${tarball.version}";
- meta.description = "Release-critical builds";
- constituents =
- [ tarball
- build.i686-linux
- build.x86_64-darwin
- build.x86_64-linux
- build.aarch64-linux
- binaryTarball.i686-linux
- binaryTarball.x86_64-darwin
- binaryTarball.x86_64-linux
- binaryTarball.aarch64-linux
- tests.remoteBuilds
- tests.nix-copy-closure
- tests.binaryTarball
- tests.evalNixpkgs
- tests.evalNixOS
- installerScript
- ];
- };
-
- };
-
-
- makeRPM_i686 = makeRPM "i686-linux";
- makeRPM_x86_64 = makeRPM "x86_64-linux";
-
- makeRPM =
- system: diskImageFun: extraPackages:
-
- with import nixpkgs { inherit system; };
-
- releaseTools.rpmBuild rec {
- name = "nix-rpm";
- src = jobs.tarball;
- diskImage = (diskImageFun vmTools.diskImageFuns)
- { extraPackages =
- [ "sqlite" "sqlite-devel" "bzip2-devel" "libcurl-devel" "openssl-devel" "xz-devel" "libseccomp-devel" "libsodium-devel" "boost-devel" "bison" "flex" ]
- ++ extraPackages; };
- # At most 2047MB can be simulated in qemu-system-i386
- memSize = 2047;
- meta.schedulingPriority = 50;
- postRPMInstall = "cd /tmp/rpmout/BUILD/nix-* && make installcheck";
- #enableParallelBuilding = true;
- };
-
-
- makeDeb_i686 = makeDeb "i686-linux";
- makeDeb_x86_64 = makeDeb "x86_64-linux";
-
- makeDeb =
- system: diskImageFun: extraPackages: extraDebPackages:
-
- with import nixpkgs { inherit system; };
-
- releaseTools.debBuild {
- name = "nix-deb";
- src = jobs.tarball;
- diskImage = (diskImageFun vmTools.diskImageFuns)
- { extraPackages =
- [ "libsqlite3-dev" "libbz2-dev" "libcurl-dev" "libcurl3-nss" "libssl-dev" "liblzma-dev" "libseccomp-dev" "libsodium-dev" "libboost-all-dev" ]
- ++ extraPackages; };
- memSize = 2047;
- meta.schedulingPriority = 50;
- postInstall = "make installcheck";
- configureFlags = "--sysconfdir=/etc";
- debRequires =
- [ "curl" "libsqlite3-0" "libbz2-1.0" "bzip2" "xz-utils" "libssl1.0.0" "liblzma5" "libseccomp2" ]
- ++ extraDebPackages;
- debMaintainer = "Eelco Dolstra <eelco.dolstra@logicblox.com>";
- doInstallCheck = true;
- #enableParallelBuilding = true;
- };
-
-
-in jobs
diff --git a/shell.nix b/shell.nix
deleted file mode 100644
index 34abf05ea..000000000
--- a/shell.nix
+++ /dev/null
@@ -1,28 +0,0 @@
-{ useClang ? true
-, nixpkgs ? builtins.fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-19.03.tar.gz
-}:
-
-with import nixpkgs { system = builtins.currentSystem or "x86_64-linux"; };
-
-with import ./release-common.nix { inherit pkgs; };
-
-(if useClang then clangStdenv else stdenv).mkDerivation {
- name = "nix";
-
- buildInputs = buildDeps ++ tarballDeps ++ perlDeps;
-
- inherit configureFlags;
-
- enableParallelBuilding = true;
-
- installFlags = "sysconfdir=$(out)/etc";
-
- shellHook =
- ''
- export prefix=$(pwd)/inst
- configureFlags+=" --prefix=$prefix"
- PKG_CONFIG_PATH=$prefix/lib/pkgconfig:$PKG_CONFIG_PATH
- PATH=$prefix/bin:$PATH
- unset PYTHONPATH
- '';
-}
diff --git a/tests/github-flakes.nix b/tests/github-flakes.nix
index 2345972ce..7211360cd 100644
--- a/tests/github-flakes.nix
+++ b/tests/github-flakes.nix
@@ -1,6 +1,9 @@
-{ nixpkgs, system, nix }:
+{ nixpkgs, system, overlay }:
-with import (nixpkgs + "/nixos/lib/testing.nix") { inherit system; };
+with import (nixpkgs + "/nixos/lib/testing.nix") {
+ inherit system;
+ extraConfigurations = [ { nixpkgs.overlays = [ overlay ]; } ];
+};
let
@@ -101,7 +104,6 @@ makeTest (
{ config, pkgs, nodes, ... }:
{ virtualisation.writableStore = true;
virtualisation.pathsInNixDB = [ pkgs.hello pkgs.fuse ];
- nix.package = nix;
nix.binaryCaches = [ ];
environment.systemPackages = [ pkgs.jq ];
networking.hosts.${(builtins.head nodes.github.config.networking.interfaces.eth1.ipv4.addresses).address} =
@@ -135,11 +137,11 @@ makeTest (
my $date = $client->succeed("nix flake info nixpkgs --json | jq -M .lastModified");
strftime("%Y%m%d%H%M%S", gmtime($date)) eq "${nixpkgs.lastModified}" or die "time mismatch";
- $client->succeed("nix build nixpkgs:hello");
+ $client->succeed("nix build nixpkgs#hello");
# The build shouldn't fail even with --tarball-ttl 0 (the server
# being down should not be a fatal error).
- $client->succeed("nix build nixpkgs:fuse --tarball-ttl 0");
+ $client->succeed("nix build nixpkgs#fuse --tarball-ttl 0");
'';
})
diff --git a/tests/nix-copy-closure.nix b/tests/nix-copy-closure.nix
index 0dc147fb3..7c4bdaded 100644
--- a/tests/nix-copy-closure.nix
+++ b/tests/nix-copy-closure.nix
@@ -1,8 +1,11 @@
# Test ‘nix-copy-closure’.
-{ nixpkgs, system, nix }:
+{ nixpkgs, system, overlay }:
-with import (nixpkgs + "/nixos/lib/testing.nix") { inherit system; };
+with import (nixpkgs + "/nixos/lib/testing.nix") {
+ inherit system;
+ extraConfigurations = [ { nixpkgs.overlays = [ overlay ]; } ];
+};
makeTest (let pkgA = pkgs.cowsay; pkgB = pkgs.wget; pkgC = pkgs.hello; in {
@@ -11,7 +14,6 @@ makeTest (let pkgA = pkgs.cowsay; pkgB = pkgs.wget; pkgC = pkgs.hello; in {
{ config, pkgs, ... }:
{ virtualisation.writableStore = true;
virtualisation.pathsInNixDB = [ pkgA ];
- nix.package = nix;
nix.binaryCaches = [ ];
};
@@ -20,7 +22,6 @@ makeTest (let pkgA = pkgs.cowsay; pkgB = pkgs.wget; pkgC = pkgs.hello; in {
{ services.openssh.enable = true;
virtualisation.writableStore = true;
virtualisation.pathsInNixDB = [ pkgB pkgC ];
- nix.package = nix;
};
};
diff --git a/tests/remote-builds.nix b/tests/remote-builds.nix
index b867f13b4..a53f9bfcd 100644
--- a/tests/remote-builds.nix
+++ b/tests/remote-builds.nix
@@ -1,8 +1,11 @@
# Test Nix's remote build feature.
-{ nixpkgs, system, nix }:
+{ nixpkgs, system, overlay }:
-with import (nixpkgs + "/nixos/lib/testing.nix") { inherit system; };
+with import (nixpkgs + "/nixos/lib/testing.nix") {
+ inherit system;
+ extraConfigurations = [ { nixpkgs.overlays = [ overlay ]; } ];
+};
makeTest (
@@ -13,7 +16,6 @@ let
{ config, pkgs, ... }:
{ services.openssh.enable = true;
virtualisation.writableStore = true;
- nix.package = nix;
nix.useSandbox = true;
};
@@ -59,7 +61,6 @@ in
];
virtualisation.writableStore = true;
virtualisation.pathsInNixDB = [ config.system.build.extraUtils ];
- nix.package = nix;
nix.binaryCaches = [ ];
programs.ssh.extraConfig = "ConnectTimeout 30";
};
diff --git a/tests/setuid.nix b/tests/setuid.nix
index 77e83c8d6..d79d071df 100644
--- a/tests/setuid.nix
+++ b/tests/setuid.nix
@@ -1,15 +1,17 @@
# Verify that Linux builds cannot create setuid or setgid binaries.
-{ nixpkgs, system, nix }:
+{ nixpkgs, system, overlay }:
-with import (nixpkgs + "/nixos/lib/testing.nix") { inherit system; };
+with import (nixpkgs + "/nixos/lib/testing.nix") {
+ inherit system;
+ extraConfigurations = [ { nixpkgs.overlays = [ overlay ]; } ];
+};
makeTest {
machine =
{ config, lib, pkgs, ... }:
{ virtualisation.writableStore = true;
- nix.package = nix;
nix.binaryCaches = [ ];
nix.nixPath = [ "nixpkgs=${lib.cleanSource pkgs.path}" ];
virtualisation.pathsInNixDB = [ pkgs.stdenv pkgs.pkgsi686Linux.stdenv ];