 c10fe148a3
			
		
	
	
		c10fe148a3
		
	
	
	
	
		
			
			configuration now. * /var/run/booted-system symlinks to the system configuration used at boot time. svn path=/nixos/trunk/; revision=8381
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #! @shell@
 | |
| 
 | |
| set -e
 | |
| export PATH=/empty
 | |
| for i in @path@; do PATH=$PATH:$i/bin:$i/sbin; done
 | |
| action="$1"
 | |
| 
 | |
| if ! test -e /etc/NIXOS; then
 | |
|     echo "This is not a NixOS installation (/etc/NIXOS) is missing!"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| if test -z "$action"; then
 | |
|     cat <<EOF
 | |
| Usage: $0 [switch|boot|test]
 | |
| 
 | |
| switch: make the configuration the boot default and activate now
 | |
| boot:   make the configuration the boot default
 | |
| test:   activate the configuration, but don't make it the boot default
 | |
| EOF
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| if test "$action" = "switch" -o "$action" = "boot"; then
 | |
|     if test -n "@grubDevice@"; then
 | |
|         mkdir -m 0700 -p /boot/grub
 | |
|         @grubMenuBuilder@ @out@
 | |
|         if test "$NIXOS_INSTALL_GRUB" = 1; then
 | |
|             @grub@/sbin/grub-install "@grubDevice@" --no-floppy --recheck
 | |
|         fi
 | |
|     else
 | |
|         echo "Warning: don't know how to make this configuration bootable" 1>&2
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| if test "$action" = "switch" -o "$action" = "test"; then
 | |
| 
 | |
|     oldEvents=$(readlink -f /etc/event.d || true)
 | |
|     newEvents=$(readlink -f @out@/etc/event.d)
 | |
| 
 | |
|     echo "old: $oldEvents"
 | |
|     echo "new: $newEvents"
 | |
| 
 | |
|     stopJob() {
 | |
|         local job=$1
 | |
|         initctl stop "$job"
 | |
|         while ! initctl list 2>&1 | grep -q "initctl: $job (stop)"; do
 | |
|             echo "waiting for $job..."
 | |
|             sleep 1
 | |
|         done
 | |
|     }
 | |
| 
 | |
|     # Stop all services that are not in the new Upstart
 | |
|     # configuration.
 | |
|     for event in $(cd $oldEvents && ls); do
 | |
|         if ! test -e "$newEvents/$event"; then
 | |
|             echo "stopping $event..."
 | |
|             stopJob $event
 | |
|         fi
 | |
|     done
 | |
| 
 | |
|     # Activate the new configuration (i.e., update /etc, make
 | |
|     # accounts, and so on).
 | |
|     echo "Activating the configuration..."
 | |
|     @out@/activate @out@
 | |
| 
 | |
|     # Make Upstart reload its events.  !!! Should wait until it has
 | |
|     # finished processing its stop events.
 | |
|     kill -TERM 1 
 | |
| 
 | |
|     # Start all new services and restart all changed services.
 | |
|     for event in $(cd $newEvents && ls); do
 | |
| 
 | |
|         # Hack: skip the sys-* and ctrl-alt-delete events.
 | |
|         # Another hack: don't restart the X server (that would kill all the clients).
 | |
|         if echo "$event" | grep -q "^sys-\|^ctrl-\|^xserver"; then continue; fi
 | |
|     
 | |
|         if ! test -e "$oldEvents/$event"; then
 | |
|             echo "starting $event..."
 | |
|             initctl start "$event"
 | |
|         elif test "$(readlink "$oldEvents/$event")" != "$(readlink "$newEvents/$event")"; then
 | |
|             echo "restarting $event..."
 | |
|             stopJob $event
 | |
|             initctl start "$event"
 | |
|         else
 | |
|             echo "unchanged $event"
 | |
|         fi
 | |
|     done
 | |
| fi
 | |
| 
 | |
| sync
 |