aboutsummaryrefslogtreecommitdiff
path: root/pkgs/build-support
diff options
context:
space:
mode:
authorgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>2020-12-03 00:36:28 +0000
committerGitHub <noreply@github.com>2020-12-03 00:36:28 +0000
commit58274c4f8d1deda9891c370273735987584c1615 (patch)
tree12da3a2773afb1e878cdda421139d82317c66394 /pkgs/build-support
parentd3f56086246776bbf812b09c0e58b080244bd4f4 (diff)
parent535c1daca6705026c6858a5aca1229064ed537d0 (diff)
Merge master into staging-next
Diffstat (limited to 'pkgs/build-support')
-rw-r--r--pkgs/build-support/docker/default.nix31
-rw-r--r--pkgs/build-support/docker/examples.nix17
2 files changed, 37 insertions, 11 deletions
diff --git a/pkgs/build-support/docker/default.nix b/pkgs/build-support/docker/default.nix
index db1062e1b5d8..b30ac5c77655 100644
--- a/pkgs/build-support/docker/default.nix
+++ b/pkgs/build-support/docker/default.nix
@@ -1,4 +1,5 @@
{
+ bashInteractive,
buildPackages,
cacert,
callPackage,
@@ -29,6 +30,7 @@
writeReferencesToFile,
writeScript,
writeText,
+ writeTextDir,
writePython3,
system, # Note: This is the cross system we're compiling for
}:
@@ -70,7 +72,7 @@ in
rec {
examples = callPackage ./examples.nix {
- inherit buildImage pullImage shadowSetup buildImageWithNixDb;
+ inherit buildImage buildLayeredImage fakeNss pullImage shadowSetup buildImageWithNixDb;
};
pullImage = let
@@ -684,6 +686,33 @@ rec {
in
result;
+ # Provide a /etc/passwd and /etc/group that contain root and nobody.
+ # Useful when packaging binaries that insist on using nss to look up
+ # username/groups (like nginx).
+ # /bin/sh is fine to not exist, and provided by another shim.
+ fakeNss = symlinkJoin {
+ name = "fake-nss";
+ paths = [
+ (writeTextDir "etc/passwd" ''
+ root:x:0:0:root user:/var/empty:/bin/sh
+ nobody:x:65534:65534:nobody:/var/empty:/bin/sh
+ '')
+ (writeTextDir "etc/group" ''
+ root:x:0:
+ nobody:x:65534:
+ '')
+ (runCommand "var-empty" {} ''
+ mkdir -p $out/var/empty
+ '')
+ ];
+ };
+
+ # This provides /bin/sh, pointing to bashInteractive.
+ binSh = runCommand "bin-sh" {} ''
+ mkdir -p $out/bin
+ ln -s ${bashInteractive}/bin/bash $out/bin/sh
+ '';
+
# Build an image and populate its nix database with the provided
# contents. The main purpose is to be able to use nix commands in
# the container.
diff --git a/pkgs/build-support/docker/examples.nix b/pkgs/build-support/docker/examples.nix
index 3f30f1a2adb4..85ddeb257405 100644
--- a/pkgs/build-support/docker/examples.nix
+++ b/pkgs/build-support/docker/examples.nix
@@ -7,7 +7,7 @@
# $ nix-build '<nixpkgs>' -A dockerTools.examples.redis
# $ docker load < result
-{ pkgs, buildImage, pullImage, shadowSetup, buildImageWithNixDb, pkgsCross }:
+{ pkgs, buildImage, buildLayeredImage, fakeNss, pullImage, shadowSetup, buildImageWithNixDb, pkgsCross }:
rec {
# 1. basic example
@@ -44,7 +44,7 @@ rec {
nginx = let
nginxPort = "80";
nginxConf = pkgs.writeText "nginx.conf" ''
- user nginx nginx;
+ user nobody nobody;
daemon off;
error_log /dev/stdout info;
pid /dev/null;
@@ -64,10 +64,13 @@ rec {
<html><body><h1>Hello from NGINX</h1></body></html>
'';
in
- buildImage {
+ buildLayeredImage {
name = "nginx-container";
tag = "latest";
- contents = pkgs.nginx;
+ contents = [
+ fakeNss
+ pkgs.nginx
+ ];
extraCommands = ''
# nginx still tries to read this directory even if error_log
@@ -75,12 +78,6 @@ rec {
mkdir -p var/log/nginx
mkdir -p var/cache/nginx
'';
- runAsRoot = ''
- #!${pkgs.stdenv.shell}
- ${shadowSetup}
- groupadd --system nginx
- useradd --system --gid nginx nginx
- '';
config = {
Cmd = [ "nginx" "-c" nginxConf ];