summary refs log tree commit diff
path: root/nixos/modules/virtualisation
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2014-04-19 13:02:13 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2014-04-19 13:14:51 +0200
commitb03a2f9e9022f3e56bcf935eaa8d385bd1e5b374 (patch)
tree81b7e1e250d4c4e631aae32b13743018c76b4eaf /nixos/modules/virtualisation
parent9f1c9404da858eb6347493190e40e59c7f81f2c8 (diff)
downloadnixlib-b03a2f9e9022f3e56bcf935eaa8d385bd1e5b374.tar
nixlib-b03a2f9e9022f3e56bcf935eaa8d385bd1e5b374.tar.gz
nixlib-b03a2f9e9022f3e56bcf935eaa8d385bd1e5b374.tar.bz2
nixlib-b03a2f9e9022f3e56bcf935eaa8d385bd1e5b374.tar.lz
nixlib-b03a2f9e9022f3e56bcf935eaa8d385bd1e5b374.tar.xz
nixlib-b03a2f9e9022f3e56bcf935eaa8d385bd1e5b374.tar.zst
nixlib-b03a2f9e9022f3e56bcf935eaa8d385bd1e5b374.zip
Set personality when running a 32-bit container on a 64-bit host
Diffstat (limited to 'nixos/modules/virtualisation')
-rw-r--r--nixos/modules/virtualisation/containers.nix13
1 files changed, 10 insertions, 3 deletions
diff --git a/nixos/modules/virtualisation/containers.nix b/nixos/modules/virtualisation/containers.nix
index 4ce113f10ee8..4fca872d72eb 100644
--- a/nixos/modules/virtualisation/containers.nix
+++ b/nixos/modules/virtualisation/containers.nix
@@ -176,7 +176,6 @@ in
               "/nix/var/nix/profiles/per-container/$INSTANCE" \
               "/nix/var/nix/gcroots/per-container/$INSTANCE"
 
-            SYSTEM_PATH=/nix/var/nix/profiles/system
             if [ -f "/etc/containers/$INSTANCE.conf" ]; then
               . "/etc/containers/$INSTANCE.conf"
             fi
@@ -212,14 +211,22 @@ in
               extraFlags="--capability=CAP_NET_ADMIN"
             fi
 
+            # If the host is 64-bit and the container is 32-bit, add a
+            # --personality flag.
+            ${optionalString (config.nixpkgs.system == "x86_64-linux") ''
+              if [ "$(< ''${SYSTEM_PATH:-/nix/var/nix/profiles/per-container/$INSTANCE/system}/system)" = i686-linux ]; then
+                extraFlags+=" --personality=x86"
+              fi
+            ''}
+
             exec $runInNetNs ${config.systemd.package}/bin/systemd-nspawn \
-              -M "$INSTANCE" -D "/var/lib/containers/$INSTANCE" $extraFlags \
+              -M "$INSTANCE" -D "$root" $extraFlags \
               --bind-ro=/nix/store \
               --bind-ro=/nix/var/nix/db \
               --bind-ro=/nix/var/nix/daemon-socket \
               --bind="/nix/var/nix/profiles/per-container/$INSTANCE:/nix/var/nix/profiles" \
               --bind="/nix/var/nix/gcroots/per-container/$INSTANCE:/nix/var/nix/gcroots" \
-              "$SYSTEM_PATH/init"
+              "''${SYSTEM_PATH:-/nix/var/nix/profiles/system}/init"
           '';
 
         postStart =