summaryrefslogtreecommitdiff
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
parentecd06ca9faa7b87fb7be770f563c8a0760a64709 (diff)
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.
-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)