]> git.immae.eu Git - github/fretlink/docker-nix.git/commitdiff
volume: change base images to be able to mount /nix/store as volume 7/head
authorPaul Bonaud <paul.bonaud@fretlink.com>
Wed, 5 Feb 2020 08:56:55 +0000 (09:56 +0100)
committerPaul Bonaud <paul.bonaud@fretlink.com>
Wed, 5 Feb 2020 16:47:22 +0000 (17:47 +0100)
These changes will allow the nix store to be mounted as a volume and
still be able to launch a bash console with the correct nix
environment.

.travis.yml
alpine/Dockerfile
debian/Dockerfile
files/.profile [new file with mode: 0755]

index 32a66bbfa42cf398c5d68aabb724e6088e06a732..6da21de0630a7f7d3ff7e7229f6c75837c3d9a87 100644 (file)
@@ -14,6 +14,6 @@ matrix:
     - env: BASE_OS=debian
 
 script:
-  - docker build --pull -t fretlink/nix ${BASE_OS}/
+  - docker build --pull -t fretlink/nix -f ${BASE_OS}/Dockerfile .
   - docker run -it --rm fretlink/nix 'nix-channel --list'
   - docker run -it --rm fretlink/nix 'nix-env -iA nixpkgs.hello && test "$(hello)" = "Hello, world!"'
index 1b3d2290e69620e700d98058db135d828039b4fc..0e4234539357a5e9e06df70ee2f21bdc4d712f91 100644 (file)
@@ -36,8 +36,17 @@ RUN nix-channel --add https://nixos.org/channels/nixpkgs-19.09-darwin nixpkgs \
 # Propagate UTF8
 # https://github.com/NixOS/nix/issues/599#issuecomment-153885553
 # The same is hapenning with stack2nix
-RUN nix-env -iA nixpkgs.glibcLocales \
-    && echo "export LOCALE_ARCHIVE=$(nix-env --installed --no-name --out-path --query glibc-locales)/lib/locale/locale-archive" >> ${HOME}/.profile
+RUN nix-env -iA nixpkgs.glibcLocales
+
+# < Nix context as a volume
+# We want to be able to define /nix/store as a volume
+# We thus need to "save" the current nix context to be able
+# to restore it at startup time
+RUN cp -R /nix /home/nixuser/initial-nix
+VOLUME ["/nix"]
+# Create bash profile
+COPY --chown=nixuser:nixuser files/.profile ${HOME}/.profile
+# />
 
 # Make sure to use "login" shell when running container
 ENTRYPOINT ["/usr/bin/env", "bash", "-l", "-c"]
index 5c4c46f155c70be802767a3a17d3e2b13d78b092..90b2e65848c6f69f627a2efb1071884e7d3b439b 100644 (file)
@@ -36,8 +36,17 @@ RUN nix-channel --add https://nixos.org/channels/nixpkgs-19.09-darwin nixpkgs \
 # Propagate UTF8
 # https://github.com/NixOS/nix/issues/599#issuecomment-153885553
 # The same is hapenning with stack2nix
-RUN nix-env -iA nixpkgs.glibcLocales \
-    && echo "export LOCALE_ARCHIVE=$(nix-env --installed --no-name --out-path --query glibc-locales)/lib/locale/locale-archive" >> ${HOME}/.profile
+RUN nix-env -iA nixpkgs.glibcLocales
+
+# < Nix context as a volume
+# We want to be able to define /nix/store as a volume
+# We thus need to "save" the current nix context to be able
+# to restore it at startup time
+RUN cp -R /nix /home/nixuser/initial-nix
+VOLUME ["/nix"]
+# Create bash profile
+COPY --chown=nixuser:nixuser files/.profile ${HOME}/.profile
+# />
 
 # Make sure to use "login" shell when running container
 ENTRYPOINT ["/usr/bin/env", "bash", "-l", "-c"]
diff --git a/files/.profile b/files/.profile
new file mode 100755 (executable)
index 0000000..68b4473
--- /dev/null
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+
+# Copy initial saved nix context if the /nix is empty
+[ ! "$(ls -A /nix)" ] && cp -R ~/initial-nix/* /nix/
+
+# Source nix environment
+nix_profile="/home/nixuser/.nix-profile/etc/profile.d/nix.sh"
+# shellcheck source=/home/nixuser/.nix-profile/etc/profile.d/nix.sh
+[ -e "${nix_profile}" ] && . "${nix_profile}"
+
+# Propagate UTF8
+# https://github.com/NixOS/nix/issues/599#issuecomment-153885553
+LOCALE_ARCHIVE="$(nix-env --installed --no-name --out-path --query glibc-locales)/lib/locale/locale-archive"
+export LOCALE_ARCHIVE