summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-09-11 22:18:52 +0200
committerLudovic Courtès <ludo@gnu.org>2014-09-12 00:14:52 +0200
commitee248b6a7043f308eaaa2b1deb708b52d4923659 (patch)
tree9640a99b3b0f586c18888eea2d8bc034c9bd80fd /gnu
parentecd06ca9faa7b87fb7be770f563c8a0760a64709 (diff)
downloadguix-ee248b6a7043f308eaaa2b1deb708b52d4923659.tar.gz
activation: Make the /bin/sh symlink at activation time.
* gnu/build/install.scm (directives): Remove "/bin/sh".
* gnu/build/activation.scm (activate-/bin/sh): New procedure.
* gnu/system.scm (operating-system-activation-script): Use it.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/build/activation.scm6
-rw-r--r--gnu/build/install.scm1
-rw-r--r--gnu/system.scm5
3 files changed, 11 insertions, 1 deletions
diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm
index 009c1fff0a..ee82a078b9 100644
--- a/gnu/build/activation.scm
+++ b/gnu/build/activation.scm
@@ -26,6 +26,7 @@
   #:export (activate-users+groups
             activate-etc
             activate-setuid-programs
+            activate-/bin/sh
             activate-current-system))
 
 ;;; Commentary:
@@ -214,6 +215,11 @@ copy SOURCE to TARGET."
 
   (for-each make-setuid-program programs))
 
+(define (activate-/bin/sh shell)
+  "Change /bin/sh to point to SHELL."
+  (symlink shell "/bin/sh.new")
+  (rename-file "/bin/sh.new" "/bin/sh"))
+
 (define %current-system
   ;; The system that is current (a symlink.)  This is not necessarily the same
   ;; as the system we booted (aka. /run/booted-system) because we can re-build
diff --git a/gnu/build/install.scm b/gnu/build/install.scm
index 7c4a7b7753..a472259a4a 100644
--- a/gnu/build/install.scm
+++ b/gnu/build/install.scm
@@ -113,7 +113,6 @@ STORE."
     ("/var/guix/gcroots/current-system" -> "/run/current-system")
 
     (directory "/bin")
-    ("/bin/sh" -> "/run/current-system/profile/bin/bash")
     (directory "/tmp" 0 0 #o1777)                 ; sticky bit
 
     (directory "/root" 0 0)                       ; an exception
diff --git a/gnu/system.scm b/gnu/system.scm
index 20fe1d0a8f..abdd80bd6d 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -417,6 +417,11 @@ etc."
 
                     (use-modules (gnu build activation))
 
+                    ;; Make sure /bin/sh is valid and current.
+                    (activate-/bin/sh
+                     (string-append #$(canonical-package bash)
+                                    "/bin/sh"))
+
                     ;; Populate /etc.
                     (activate-etc #$etc)