diff options
author | Vladimír Čunát <vcunat@gmail.com> | 2014-09-06 16:51:14 +0200 |
---|---|---|
committer | Vladimír Čunát <vcunat@gmail.com> | 2014-09-06 16:52:45 +0200 |
commit | 06fea81c6e3d71689b59df6e2bbc11fe01ce9056 (patch) | |
tree | 5849b904bf1eb3bc8cb28b29729d83a4d0337542 /nixos/modules/installer | |
parent | 20be024d1bae622409fa56844b2f8799bbf29bb0 (diff) | |
parent | 0c398f60405090743fbdcf14faf1193c642b6328 (diff) | |
download | nixlib-06fea81c6e3d71689b59df6e2bbc11fe01ce9056.tar nixlib-06fea81c6e3d71689b59df6e2bbc11fe01ce9056.tar.gz nixlib-06fea81c6e3d71689b59df6e2bbc11fe01ce9056.tar.bz2 nixlib-06fea81c6e3d71689b59df6e2bbc11fe01ce9056.tar.lz nixlib-06fea81c6e3d71689b59df6e2bbc11fe01ce9056.tar.xz nixlib-06fea81c6e3d71689b59df6e2bbc11fe01ce9056.tar.zst nixlib-06fea81c6e3d71689b59df6e2bbc11fe01ce9056.zip |
Merge recent master into staging
Hydra: ?compare=1150594
Diffstat (limited to 'nixos/modules/installer')
-rw-r--r-- | nixos/modules/installer/cd-dvd/iso-image.nix | 2 | ||||
-rw-r--r-- | nixos/modules/installer/tools/nixos-generate-config.pl | 45 | ||||
-rw-r--r-- | nixos/modules/installer/tools/nixos-install.sh | 5 | ||||
-rw-r--r-- | nixos/modules/installer/tools/nixos-option.sh | 74 | ||||
-rw-r--r-- | nixos/modules/installer/tools/tools.nix | 1 | ||||
-rw-r--r-- | nixos/modules/installer/virtualbox-demo.nix | 3 |
6 files changed, 76 insertions, 54 deletions
diff --git a/nixos/modules/installer/cd-dvd/iso-image.nix b/nixos/modules/installer/cd-dvd/iso-image.nix index 623cfdedd269..22f31c460802 100644 --- a/nixos/modules/installer/cd-dvd/iso-image.nix +++ b/nixos/modules/installer/cd-dvd/iso-image.nix @@ -11,7 +11,7 @@ let # The Grub image. grubImage = pkgs.runCommand "grub_eltorito" {} '' - ${pkgs.grub2}/bin/grub-mkimage -O i386-pc -o tmp biosdisk iso9660 help linux linux16 chain png jpeg echo gfxmenu reboot + ${pkgs.grub2}/bin/grub-mkimage -p /boot/grub -O i386-pc -o tmp biosdisk iso9660 help linux linux16 chain png jpeg echo gfxmenu reboot cat ${pkgs.grub2}/lib/grub/*/cdboot.img tmp > $out ''; # */ diff --git a/nixos/modules/installer/tools/nixos-generate-config.pl b/nixos/modules/installer/tools/nixos-generate-config.pl index c507f7f979fa..e8f100d64984 100644 --- a/nixos/modules/installer/tools/nixos-generate-config.pl +++ b/nixos/modules/installer/tools/nixos-generate-config.pl @@ -20,6 +20,13 @@ sub uniq { return @res; } +sub runCommand { + my ($cmd) = @_; + open FILE, "$cmd 2>&1 |" or die "Failed to execute: $cmd\n"; + my @ret = <FILE>; + close FILE; + return ($?, @ret); +} # Process the command line. my $outDir = "/etc/nixos"; @@ -304,10 +311,13 @@ foreach my $fs (read_file("/proc/self/mountinfo")) { # Maybe this is a bind-mount of a filesystem we saw earlier? if (defined $fsByDev{$fields[2]}) { - my $path = $fields[3]; $path = "" if $path eq "/"; - my $base = $fsByDev{$fields[2]}; - $base = "" if $base eq "/"; - $fileSystems .= <<EOF; + # Make sure this isn't a btrfs subvolume + my ($status, @msg) = runCommand("btrfs subvol show $rootDir$mountPoint"); + if (join("", @msg) =~ /ERROR:/) { + my $path = $fields[3]; $path = "" if $path eq "/"; + my $base = $fsByDev{$fields[2]}; + $base = "" if $base eq "/"; + $fileSystems .= <<EOF; fileSystems.\"$mountPoint\" = { device = \"$base$path\"; fsType = \"none\"; @@ -315,7 +325,8 @@ foreach my $fs (read_file("/proc/self/mountinfo")) { }; EOF - next; + next; + } } $fsByDev{$fields[2]} = $mountPoint; @@ -337,6 +348,30 @@ EOF } } + # Is this a btrfs filesystem? + if ($fsType eq "btrfs") { + my ($status, @id_info) = runCommand("btrfs subvol show $rootDir$mountPoint"); + if ($status != 0 || join("", @msg) =~ /ERROR:/) { + die "Failed to retreive subvolume info for $mountPoint\n"; + } + my @ids = join("", @id_info) =~ m/Object ID:[ \t\n]*([^ \t\n]*)/; + if ($#ids > 0) { + die "Btrfs subvol name for $mountPoint listed multiple times in mount\n" + } elsif ($#ids == 0) { + my ($status, @path_info) = runCommand("btrfs subvol list $rootDir$mountPoint"); + if ($status != 0) { + die "Failed to find $mountPoint subvolume id from btrfs\n"; + } + my @paths = join("", @path_info) =~ m/ID $ids[0] [^\n]* path ([^\n]*)/; + if ($#paths > 0) { + die "Btrfs returned multiple paths for a single subvolume id, mountpoint $mountPoint\n"; + } elsif ($#paths != 0) { + die "Btrfs did not return a path for the subvolume at $mountPoint\n"; + } + push @extraOptions, "subvol=$paths[0]"; + } + } + # Emit the filesystem. $fileSystems .= <<EOF; fileSystems.\"$mountPoint\" = diff --git a/nixos/modules/installer/tools/nixos-install.sh b/nixos/modules/installer/tools/nixos-install.sh index 86952486ade0..bd334c2a3cb4 100644 --- a/nixos/modules/installer/tools/nixos-install.sh +++ b/nixos/modules/installer/tools/nixos-install.sh @@ -7,6 +7,9 @@ # * nix-env -p /nix/var/nix/profiles/system -i <nix-expr for the configuration> # * install the boot loader +# Ensure a consistent umask. +umask 0022 + # Re-exec ourselves in a private mount namespace so that our bind # mounts get cleaned up automatically. if [ "$(id -u)" = 0 ]; then @@ -243,7 +246,7 @@ chroot $mountPoint /nix/var/nix/profiles/system/activate # Ask the user to set a root password. if [ -t 0 ] ; then echo "setting root password..." - chroot $mountPoint passwd + chroot $mountPoint /var/setuid-wrappers/passwd fi diff --git a/nixos/modules/installer/tools/nixos-option.sh b/nixos/modules/installer/tools/nixos-option.sh index edc94d732084..d995787c76fe 100644 --- a/nixos/modules/installer/tools/nixos-option.sh +++ b/nixos/modules/installer/tools/nixos-option.sh @@ -11,9 +11,6 @@ usage () { # Process Arguments # ##################### -desc=false -defs=false -value=false xml=false verbose=false @@ -24,14 +21,11 @@ for arg; do if test -z "$argfun"; then case $arg in -*) - longarg="" sarg="$arg" + longarg="" while test "$sarg" != "-"; do case $sarg in --*) longarg=$arg; sarg="--";; - -d*) longarg="$longarg --description";; - -v*) longarg="$longarg --value";; - -l*) longarg="$longarg --lookup";; -*) usage;; esac # remove the first letter option @@ -42,9 +36,6 @@ for arg; do esac for larg in $longarg; do case $larg in - --description) desc=true;; - --value) value=true;; - --lookup) defs=true;; --xml) xml=true;; --verbose) verbose=true;; --help) usage;; @@ -67,16 +58,6 @@ for arg; do fi done -if $xml; then - value=true - desc=true - defs=true -fi - -if ! $defs && ! $desc; then - value=true -fi - if $verbose; then set -x else @@ -95,8 +76,7 @@ evalAttr(){ local prefix="$1" local strict="$2" local suffix="$3" - echo "(import <nixos> {}).$prefix${option:+.$option}${suffix:+.$suffix}" | - evalNix ${strict:+--strict} + echo "(import <nixos> {}).$prefix${option:+.$option}${suffix:+.$suffix}" | evalNix ${strict:+--strict} } evalOpt(){ @@ -189,35 +169,35 @@ EOF fi if test "$(evalOpt "_type" 2> /dev/null)" = '"option"'; then - $value && evalCfg 1 - - if $desc; then - $value && echo; - - if default=$(evalOpt "default" - 2> /dev/null); then - echo "Default: $default" - else - echo "Default: <None>" - fi - if example=$(evalOpt "example" - 2> /dev/null); then - echo "Example: $example" - fi - echo "Description:" - eval printf $(evalOpt "description") + echo "Value:" + evalCfg 1 + + echo + + echo "Default:" + if default=$(evalOpt "default" - 2> /dev/null); then + echo "$default" + else + echo "<None>" + fi + echo + if example=$(evalOpt "example" - 2> /dev/null); then + echo "Example: $example" fi + echo "Description:" + echo + eval printf $(evalOpt "description") - if $defs; then - $desc || $value && echo; + echo $desc; - printPath () { echo " $1"; } + printPath () { echo " $1"; } - echo "Declared by:" - nixMap printPath "$(findSources "declarations")" - echo "" - echo "Defined by:" - nixMap printPath "$(findSources "files")" - echo "" - fi + echo "Declared by:" + nixMap printPath "$(findSources "declarations")" + echo + echo "Defined by:" + nixMap printPath "$(findSources "files")" + echo else # echo 1>&2 "Warning: This value is not an option." diff --git a/nixos/modules/installer/tools/tools.nix b/nixos/modules/installer/tools/tools.nix index 39da2f1f0be6..91a30695a7a5 100644 --- a/nixos/modules/installer/tools/tools.nix +++ b/nixos/modules/installer/tools/tools.nix @@ -38,6 +38,7 @@ let nixos-generate-config = makeProg { name = "nixos-generate-config"; src = ./nixos-generate-config.pl; + path = [ pkgs.btrfsProgs ]; perl = "${pkgs.perl}/bin/perl -I${pkgs.perlPackages.FileSlurp}/lib/perl5/site_perl"; }; diff --git a/nixos/modules/installer/virtualbox-demo.nix b/nixos/modules/installer/virtualbox-demo.nix index f68f8dc40aa8..49ec08996104 100644 --- a/nixos/modules/installer/virtualbox-demo.nix +++ b/nixos/modules/installer/virtualbox-demo.nix @@ -10,6 +10,9 @@ with lib; ../profiles/clone-config.nix ]; + # FIXME: UUID detection is currently broken + boot.loader.grub.fsIdentifier = "provided"; + # Allow mounting of shared folders. users.extraUsers.demo.extraGroups = [ "vboxsf" ]; |