| 
									
										
										
										
											2007-02-06 13:09:25 +00:00
										 |  |  |  | #! @shell@ -e
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-02-06 13:12:10 +00:00
										 |  |  |  | showSyntax() { | 
					
						
							| 
									
										
										
										
											2013-10-11 14:05:53 +02:00
										 |  |  |  |     exec man nixos-rebuild | 
					
						
							| 
									
										
										
										
											2007-02-06 13:09:25 +00:00
										 |  |  |  |     exit 1 | 
					
						
							| 
									
										
										
										
											2007-02-06 13:12:10 +00:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-04 14:58:26 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | # Parse the command line. | 
					
						
							| 
									
										
										
										
											2012-11-22 12:04:00 +01:00
										 |  |  |  | extraBuildFlags=() | 
					
						
							| 
									
										
										
										
											2008-08-04 14:58:26 +00:00
										 |  |  |  | action= | 
					
						
							| 
									
										
										
										
											2009-08-03 12:36:15 +00:00
										 |  |  |  | buildNix=1 | 
					
						
							| 
									
										
										
										
											2009-08-19 15:04:19 +00:00
										 |  |  |  | rollback= | 
					
						
							| 
									
										
										
										
											2012-06-25 16:17:34 -04:00
										 |  |  |  | upgrade= | 
					
						
							| 
									
										
										
										
											2013-07-23 20:31:03 +02:00
										 |  |  |  | repair= | 
					
						
							| 
									
										
										
										
											2013-10-09 19:13:26 +02:00
										 |  |  |  | profile=/nix/var/nix/profiles/system | 
					
						
							| 
									
										
										
										
											2008-08-04 14:58:26 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:21:59 +01:00
										 |  |  |  | while [ "$#" -gt 0 ]; do | 
					
						
							| 
									
										
										
										
											2009-08-03 12:36:15 +00:00
										 |  |  |  |     i="$1"; shift 1 | 
					
						
							| 
									
										
										
										
											2010-01-03 13:36:23 +00:00
										 |  |  |  |     case "$i" in | 
					
						
							|  |  |  |  |       --help) | 
					
						
							| 
									
										
										
										
											2008-08-04 14:58:26 +00:00
										 |  |  |  |         showSyntax | 
					
						
							| 
									
										
										
										
											2012-06-25 16:17:34 -04:00
										 |  |  |  |         ;; | 
					
						
							| 
									
										
										
										
											2012-12-08 19:00:06 +01:00
										 |  |  |  |       switch|boot|test|build|dry-run|build-vm|build-vm-with-bootloader) | 
					
						
							| 
									
										
										
										
											2008-08-04 14:58:26 +00:00
										 |  |  |  |         action="$i" | 
					
						
							| 
									
										
										
										
											2012-06-25 16:17:34 -04:00
										 |  |  |  |         ;; | 
					
						
							| 
									
										
										
										
											2010-01-03 13:36:23 +00:00
										 |  |  |  |       --install-grub) | 
					
						
							| 
									
										
										
										
											2009-08-03 12:36:15 +00:00
										 |  |  |  |         export NIXOS_INSTALL_GRUB=1 | 
					
						
							| 
									
										
										
										
											2012-06-25 16:17:34 -04:00
										 |  |  |  |         ;; | 
					
						
							| 
									
										
										
										
											2010-01-03 13:36:23 +00:00
										 |  |  |  |       --no-build-nix) | 
					
						
							| 
									
										
										
										
											2009-08-03 12:36:15 +00:00
										 |  |  |  |         buildNix= | 
					
						
							| 
									
										
										
										
											2012-06-25 16:17:34 -04:00
										 |  |  |  |         ;; | 
					
						
							| 
									
										
										
										
											2010-01-03 13:36:23 +00:00
										 |  |  |  |       --rollback) | 
					
						
							| 
									
										
										
										
											2009-08-19 15:04:19 +00:00
										 |  |  |  |         rollback=1 | 
					
						
							| 
									
										
										
										
											2012-06-25 16:17:34 -04:00
										 |  |  |  |         ;; | 
					
						
							|  |  |  |  |       --upgrade) | 
					
						
							|  |  |  |  |         upgrade=1 | 
					
						
							|  |  |  |  |         ;; | 
					
						
							| 
									
										
										
										
											2013-07-23 20:31:03 +02:00
										 |  |  |  |       --repair) | 
					
						
							|  |  |  |  |         repair=1 | 
					
						
							|  |  |  |  |         extraBuildFlags+=("$i") | 
					
						
							|  |  |  |  |         ;; | 
					
						
							| 
									
										
										
										
											2013-08-10 21:51:44 +00:00
										 |  |  |  |       --show-trace|--no-build-hook|--keep-failed|-K|--keep-going|-k|--verbose|-v|-vv|-vvv|-vvvv|-vvvvv|--fallback|--repair) | 
					
						
							| 
									
										
										
										
											2012-11-22 12:04:00 +01:00
										 |  |  |  |         extraBuildFlags+=("$i") | 
					
						
							| 
									
										
										
										
											2012-06-25 16:17:34 -04:00
										 |  |  |  |         ;; | 
					
						
							| 
									
										
										
										
											2012-03-02 13:31:12 +00:00
										 |  |  |  |       --max-jobs|-j|--cores|-I) | 
					
						
							| 
									
										
										
										
											2011-03-07 12:12:39 +00:00
										 |  |  |  |         j="$1"; shift 1 | 
					
						
							| 
									
										
										
										
											2012-11-22 12:04:00 +01:00
										 |  |  |  |         extraBuildFlags+=("$i" "$j") | 
					
						
							| 
									
										
										
										
											2012-06-25 16:17:34 -04:00
										 |  |  |  |         ;; | 
					
						
							| 
									
										
										
										
											2012-09-14 13:23:19 -04:00
										 |  |  |  |       --option) | 
					
						
							|  |  |  |  |         j="$1"; shift 1 | 
					
						
							|  |  |  |  |         k="$1"; shift 1 | 
					
						
							| 
									
										
										
										
											2012-11-22 12:04:00 +01:00
										 |  |  |  |         extraBuildFlags+=("$i" "$j" "$k") | 
					
						
							| 
									
										
										
										
											2012-09-14 13:23:19 -04:00
										 |  |  |  |         ;; | 
					
						
							| 
									
										
										
										
											2010-01-03 13:36:23 +00:00
										 |  |  |  |       --fast) | 
					
						
							| 
									
										
										
										
											2009-10-14 23:56:11 +00:00
										 |  |  |  |         buildNix= | 
					
						
							| 
									
										
										
										
											2012-11-22 12:04:00 +01:00
										 |  |  |  |         extraBuildFlags+=(--show-trace) | 
					
						
							| 
									
										
										
										
											2012-06-25 16:17:34 -04:00
										 |  |  |  |         ;; | 
					
						
							| 
									
										
										
										
											2013-10-09 19:13:26 +02:00
										 |  |  |  |       --profile-name|-p) | 
					
						
							|  |  |  |  |         if [ -z "$1" ]; then | 
					
						
							|  |  |  |  |             echo "$0: ‘--profile-name’ requires an argument" | 
					
						
							|  |  |  |  |             exit 1 | 
					
						
							|  |  |  |  |         fi | 
					
						
							|  |  |  |  |         if [ "$1" != system ]; then | 
					
						
							|  |  |  |  |             profile="/nix/var/nix/profiles/system-profiles/$1" | 
					
						
							|  |  |  |  |             mkdir -p -m 0755 "$(dirname "$profile")" | 
					
						
							|  |  |  |  |         fi | 
					
						
							|  |  |  |  |         shift 1 | 
					
						
							|  |  |  |  |         ;; | 
					
						
							| 
									
										
										
										
											2010-01-03 13:36:23 +00:00
										 |  |  |  |       *) | 
					
						
							| 
									
										
										
										
											2008-08-04 14:58:26 +00:00
										 |  |  |  |         echo "$0: unknown option \`$i'" | 
					
						
							|  |  |  |  |         exit 1 | 
					
						
							| 
									
										
										
										
											2012-06-25 16:17:34 -04:00
										 |  |  |  |         ;; | 
					
						
							| 
									
										
										
										
											2010-01-03 13:36:23 +00:00
										 |  |  |  |     esac | 
					
						
							| 
									
										
										
										
											2008-08-04 14:58:26 +00:00
										 |  |  |  | done | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:21:59 +01:00
										 |  |  |  | if [ -z "$action" ]; then showSyntax; fi | 
					
						
							| 
									
										
										
										
											2007-02-06 13:09:25 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:21:59 +01:00
										 |  |  |  | if [ -n "$rollback" ]; then | 
					
						
							| 
									
										
										
										
											2009-08-19 15:04:19 +00:00
										 |  |  |  |     buildNix= | 
					
						
							|  |  |  |  | fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-02-06 13:09:25 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-03 12:44:45 +00:00
										 |  |  |  | tmpDir=$(mktemp -t -d nixos-rebuild.XXXXXX) | 
					
						
							|  |  |  |  | trap 'rm -rf "$tmpDir"' EXIT | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-04 09:01:54 +00:00
										 |  |  |  | # If the Nix daemon is running, then use it.  This allows us to use | 
					
						
							|  |  |  |  | # the latest Nix from Nixpkgs (below) for expression evaluation, while | 
					
						
							|  |  |  |  | # still using the old Nix (via the daemon) for actual store access. | 
					
						
							|  |  |  |  | # This matters if the new Nix in Nixpkgs has a schema change.  It | 
					
						
							|  |  |  |  | # would upgrade the schema, which should only happen once we actually | 
					
						
							|  |  |  |  | # switch to the new configuration. | 
					
						
							| 
									
										
										
										
											2013-07-23 20:31:03 +02:00
										 |  |  |  | # If --repair is given, don't try to use the Nix daemon, because the | 
					
						
							|  |  |  |  | # flag can only be used directly. | 
					
						
							|  |  |  |  | if [ -z "$repair" ] && systemctl show nix-daemon.socket nix-daemon.service | grep -q ActiveState=active; then | 
					
						
							| 
									
										
										
										
											2008-06-04 09:01:54 +00:00
										 |  |  |  |     export NIX_REMOTE=${NIX_REMOTE:-daemon} | 
					
						
							|  |  |  |  | fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-25 16:17:34 -04:00
										 |  |  |  | # If ‘--upgrade’ is given, run ‘nix-channel --update nixos’. | 
					
						
							|  |  |  |  | if [ -n "$upgrade" ]; then | 
					
						
							|  |  |  |  |     nix-channel --update nixos | 
					
						
							|  |  |  |  | fi | 
					
						
							| 
									
										
										
										
											2010-07-14 14:18:27 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 12:01:20 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-18 15:38:05 +00:00
										 |  |  |  | # First build Nix, since NixOS may require a newer version than the | 
					
						
							|  |  |  |  | # current one.  Of course, the same goes for Nixpkgs, but Nixpkgs is | 
					
						
							|  |  |  |  | # more conservative. | 
					
						
							| 
									
										
										
										
											2013-01-16 16:11:51 +01:00
										 |  |  |  | if [ "$action" != dry-run -a -n "$buildNix" ]; then | 
					
						
							| 
									
										
										
										
											2009-12-09 18:23:48 +00:00
										 |  |  |  |     echo "building Nix..." >&2 | 
					
						
							| 
									
										
										
										
											2012-11-22 12:04:00 +01:00
										 |  |  |  |     if ! nix-build '<nixos>' -A config.environment.nix -o $tmpDir/nix "${extraBuildFlags[@]}" > /dev/null; then | 
					
						
							|  |  |  |  |         if ! nix-build '<nixos>' -A nixFallback -o $tmpDir/nix "${extraBuildFlags[@]}" > /dev/null; then | 
					
						
							|  |  |  |  |             nix-build '<nixpkgs>' -A nixUnstable -o $tmpDir/nix "${extraBuildFlags[@]}" > /dev/null | 
					
						
							| 
									
										
										
										
											2010-03-04 14:38:53 +00:00
										 |  |  |  |         fi | 
					
						
							| 
									
										
										
										
											2008-03-13 10:17:42 +00:00
										 |  |  |  |     fi | 
					
						
							| 
									
										
										
										
											2009-08-03 12:44:45 +00:00
										 |  |  |  |     PATH=$tmpDir/nix/bin:$PATH | 
					
						
							| 
									
										
										
										
											2008-01-02 15:30:31 +00:00
										 |  |  |  | fi | 
					
						
							| 
									
										
										
										
											2007-09-18 15:38:05 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 14:40:41 +01:00
										 |  |  |  | # Update the version suffix if we're building from Git (so that | 
					
						
							|  |  |  |  | # nixos-version shows something useful). | 
					
						
							| 
									
										
										
										
											2013-10-11 14:05:34 +02:00
										 |  |  |  | if nixpkgs=$(nix-instantiate --find-file nixpkgs "${extraBuildFlags[@]}"); then | 
					
						
							|  |  |  |  |     suffix=$(@shell@ $nixpkgs/nixos/modules/installer/tools/get-version-suffix "${extraBuildFlags[@]}") | 
					
						
							| 
									
										
										
										
											2013-01-16 14:40:41 +01:00
										 |  |  |  |     if [ -n "$suffix" ]; then | 
					
						
							| 
									
										
										
										
											2013-10-11 14:05:34 +02:00
										 |  |  |  |         echo -n "$suffix" > "$nixpkgs/.version-suffix" || true | 
					
						
							| 
									
										
										
										
											2013-01-16 14:40:41 +01:00
										 |  |  |  |     fi | 
					
						
							|  |  |  |  | fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 16:11:51 +01:00
										 |  |  |  | if [ "$action" = dry-run ]; then | 
					
						
							|  |  |  |  |     extraBuildFlags+=(--dry-run) | 
					
						
							|  |  |  |  | fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-02-06 13:09:25 +00:00
										 |  |  |  | # Either upgrade the configuration in the system profile (for "switch" | 
					
						
							|  |  |  |  | # or "boot"), or just build it and create a symlink "result" in the | 
					
						
							|  |  |  |  | # current directory (for "build" and "test"). | 
					
						
							| 
									
										
										
										
											2013-01-16 13:21:59 +01:00
										 |  |  |  | if [ -z "$rollback" ]; then | 
					
						
							| 
									
										
										
										
											2009-12-09 18:23:48 +00:00
										 |  |  |  |     echo "building the system configuration..." >&2 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:21:59 +01:00
										 |  |  |  |     if [ "$action" = switch -o "$action" = boot ]; then | 
					
						
							| 
									
										
										
										
											2013-10-09 19:13:26 +02:00
										 |  |  |  |         nix-env "${extraBuildFlags[@]}" -p "$profile" -f '<nixos>' --set -A system | 
					
						
							|  |  |  |  |         pathToConfig="$profile" | 
					
						
							| 
									
										
										
										
											2013-01-16 13:21:59 +01:00
										 |  |  |  |     elif [ "$action" = test -o "$action" = build -o "$action" = dry-run ]; then | 
					
						
							| 
									
										
										
										
											2012-11-22 12:04:00 +01:00
										 |  |  |  |         nix-build '<nixos>' -A system -K -k "${extraBuildFlags[@]}" > /dev/null | 
					
						
							| 
									
										
										
										
											2009-08-19 15:04:19 +00:00
										 |  |  |  |         pathToConfig=./result | 
					
						
							| 
									
										
										
										
											2010-09-13 12:34:58 +00:00
										 |  |  |  |     elif [ "$action" = build-vm ]; then | 
					
						
							| 
									
										
										
										
											2012-11-22 12:04:00 +01:00
										 |  |  |  |         nix-build '<nixos>' -A vm -K -k "${extraBuildFlags[@]}" > /dev/null | 
					
						
							| 
									
										
										
										
											2009-08-19 15:04:19 +00:00
										 |  |  |  |         pathToConfig=./result | 
					
						
							| 
									
										
										
										
											2010-09-13 12:34:58 +00:00
										 |  |  |  |     elif [ "$action" = build-vm-with-bootloader ]; then | 
					
						
							| 
									
										
										
										
											2012-11-22 12:04:00 +01:00
										 |  |  |  |         nix-build '<nixos>' -A vmWithBootLoader -K -k "${extraBuildFlags[@]}" > /dev/null | 
					
						
							| 
									
										
										
										
											2010-09-13 12:34:58 +00:00
										 |  |  |  |         pathToConfig=./result | 
					
						
							| 
									
										
										
										
											2009-08-19 15:04:19 +00:00
										 |  |  |  |     else | 
					
						
							|  |  |  |  |         showSyntax | 
					
						
							|  |  |  |  |     fi | 
					
						
							| 
									
										
										
										
											2013-01-16 13:21:59 +01:00
										 |  |  |  | else # [ -n "$rollback" ] | 
					
						
							|  |  |  |  |     if [ "$action" = switch -o "$action" = boot ]; then | 
					
						
							| 
									
										
										
										
											2013-10-09 19:13:26 +02:00
										 |  |  |  |         nix-env --rollback -p "$profile" | 
					
						
							|  |  |  |  |         pathToConfig="$profile" | 
					
						
							| 
									
										
										
										
											2013-01-16 13:21:59 +01:00
										 |  |  |  |     elif [ "$action" = test -o "$action" = build ]; then | 
					
						
							| 
									
										
										
										
											2009-08-19 15:04:19 +00:00
										 |  |  |  |         systemNumber=$( | 
					
						
							| 
									
										
										
										
											2013-10-09 19:13:26 +02:00
										 |  |  |  |             nix-env -p "$profile" --list-generations | | 
					
						
							| 
									
										
										
										
											2009-08-19 15:04:19 +00:00
										 |  |  |  |             sed -n '/current/ {g; p;}; s/ *\([0-9]*\).*/\1/; h' | 
					
						
							|  |  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2013-10-09 19:13:26 +02:00
										 |  |  |  |         ln -sT "$profile"-${systemNumber}-link ./result | 
					
						
							| 
									
										
										
										
											2009-08-19 15:04:19 +00:00
										 |  |  |  |         pathToConfig=./result | 
					
						
							|  |  |  |  |     else | 
					
						
							|  |  |  |  |         showSyntax | 
					
						
							|  |  |  |  |     fi | 
					
						
							| 
									
										
										
										
											2007-02-06 13:09:25 +00:00
										 |  |  |  | fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # If we're not just building, then make the new configuration the boot | 
					
						
							|  |  |  |  | # default and/or activate it now. | 
					
						
							| 
									
										
										
										
											2013-01-16 13:21:59 +01:00
										 |  |  |  | if [ "$action" = switch -o "$action" = boot -o "$action" = test ]; then | 
					
						
							| 
									
										
										
										
											2007-02-06 13:09:25 +00:00
										 |  |  |  |     $pathToConfig/bin/switch-to-configuration "$action" | 
					
						
							|  |  |  |  | fi | 
					
						
							| 
									
										
										
										
											2007-02-06 13:20:53 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-16 13:21:59 +01:00
										 |  |  |  | if [ "$action" = build-vm ]; then | 
					
						
							| 
									
										
										
										
											2009-08-11 01:35:56 +00:00
										 |  |  |  |     cat >&2 <<EOF | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Done.  The virtual machine can be started by running $(echo $pathToConfig/bin/run-*-vm). | 
					
						
							|  |  |  |  | EOF | 
					
						
							|  |  |  |  | fi |