Skip to content

Commit

Permalink
nixos: introduce boot.growPartition (#33521)
Browse files Browse the repository at this point in the history
Move it from being a profile
  • Loading branch information
zimbatm committed Jan 6, 2018
1 parent 51110e2 commit eddf30c
Show file tree
Hide file tree
Showing 9 changed files with 57 additions and 58 deletions.
1 change: 1 addition & 0 deletions nixos/modules/module-list.nix
Expand Up @@ -680,6 +680,7 @@
./system/activation/top-level.nix
./system/boot/coredump.nix
./system/boot/emergency-mode.nix
./system/boot/grow-partition.nix
./system/boot/initrd-network.nix
./system/boot/initrd-ssh.nix
./system/boot/kernel.nix
Expand Down
3 changes: 3 additions & 0 deletions nixos/modules/rename.nix
Expand Up @@ -186,6 +186,9 @@ with lib;
(mkRenamedOptionModule [ "config" "fonts" "fontconfig" "ultimate" "forceAutohint" ] [ "config" "fonts" "fontconfig" "forceAutohint" ])
(mkRenamedOptionModule [ "config" "fonts" "fontconfig" "ultimate" "renderMonoTTFAsBitmap" ] [ "config" "fonts" "fontconfig" "renderMonoTTFAsBitmap" ])

# Profile splitting
(mkRenamedOptionModule [ "virtualization" "growPartition" ] [ "boot" "growPartition" ])

# Options that are obsolete and have no replacement.
(mkRemovedOptionModule [ "boot" "initrd" "luks" "enable" ] "")
(mkRemovedOptionModule [ "programs" "bash" "enable" ] "")
Expand Down
43 changes: 43 additions & 0 deletions nixos/modules/system/boot/grow-partition.nix
@@ -0,0 +1,43 @@
# This module automatically grows the root partition.
# This allows an instance to be created with a bigger root filesystem
# than provided by the machine image.

{ config, lib, pkgs, ... }:

with lib;

{

options = {
boot.growPartition = mkEnableOption "grow the root partition on boot";
};

config = mkIf config.boot.growPartition {

boot.initrd.extraUtilsCommands = ''
copy_bin_and_libs ${pkgs.gawk}/bin/gawk
copy_bin_and_libs ${pkgs.gnused}/bin/sed
copy_bin_and_libs ${pkgs.utillinux}/sbin/sfdisk
copy_bin_and_libs ${pkgs.utillinux}/sbin/lsblk
substitute "${pkgs.cloud-utils}/bin/.growpart-wrapped" "$out/bin/growpart" \
--replace "${pkgs.bash}/bin/sh" "/bin/sh" \
--replace "awk" "gawk" \
--replace "sed" "gnused"
ln -s sed $out/bin/gnused
'';

boot.initrd.postDeviceCommands = ''
rootDevice="${config.fileSystems."/".device}"
if [ -e "$rootDevice" ]; then
rootDevice="$(readlink -f "$rootDevice")"
parentDevice="$(lsblk -npo PKNAME "$rootDevice")"
TMPDIR=/run sh $(type -P growpart) "$parentDevice" "''${rootDevice#$parentDevice}"
udevadm settle
fi
'';

};

}
4 changes: 2 additions & 2 deletions nixos/modules/virtualisation/amazon-image.nix
Expand Up @@ -11,7 +11,7 @@ with lib;
let cfg = config.ec2; in

{
imports = [ ../profiles/headless.nix ./ec2-data.nix ./grow-partition.nix ./amazon-init.nix ];
imports = [ ../profiles/headless.nix ./ec2-data.nix ./amazon-init.nix ];

config = {

Expand All @@ -21,7 +21,7 @@ let cfg = config.ec2; in
}
];

virtualisation.growPartition = cfg.hvm;
boot.growPartition = cfg.hvm;

fileSystems."/" = {
device = "/dev/disk/by-label/nixos";
Expand Down
3 changes: 2 additions & 1 deletion nixos/modules/virtualisation/google-compute-image.nix
Expand Up @@ -6,7 +6,7 @@ let
gce = pkgs.google-compute-engine;
in
{
imports = [ ../profiles/headless.nix ../profiles/qemu-guest.nix ./grow-partition.nix ];
imports = [ ../profiles/headless.nix ../profiles/qemu-guest.nix ];

system.build.googleComputeImage = import ../../lib/make-disk-image.nix {
name = "google-compute-image";
Expand All @@ -29,6 +29,7 @@ in
autoResize = true;
};

boot.growPartition = true;
boot.kernelParams = [ "console=ttyS0" "panic=1" "boot.panic_on_fail" ];
boot.initrd.kernelModules = [ "virtio_scsi" ];
boot.kernelModules = [ "virtio_pci" "virtio_net" ];
Expand Down
51 changes: 3 additions & 48 deletions nixos/modules/virtualisation/grow-partition.nix
@@ -1,48 +1,3 @@
# This module automatically grows the root partition on virtual machines.
# This allows an instance to be created with a bigger root filesystem
# than provided by the machine image.

{ config, lib, pkgs, ... }:

with lib;

{

options = {

virtualisation.growPartition = mkOption {
type = types.bool;
default = true;
};

};

config = mkIf config.virtualisation.growPartition {

boot.initrd.extraUtilsCommands = ''
copy_bin_and_libs ${pkgs.gawk}/bin/gawk
copy_bin_and_libs ${pkgs.gnused}/bin/sed
copy_bin_and_libs ${pkgs.utillinux}/sbin/sfdisk
copy_bin_and_libs ${pkgs.utillinux}/sbin/lsblk
substitute "${pkgs.cloud-utils}/bin/.growpart-wrapped" "$out/bin/growpart" \
--replace "${pkgs.bash}/bin/sh" "/bin/sh" \
--replace "awk" "gawk" \
--replace "sed" "gnused"
ln -s sed $out/bin/gnused
'';

boot.initrd.postDeviceCommands = ''
rootDevice="${config.fileSystems."/".device}"
if [ -e "$rootDevice" ]; then
rootDevice="$(readlink -f "$rootDevice")"
parentDevice="$(lsblk -npo PKNAME "$rootDevice")"
TMPDIR=/run sh $(type -P growpart) "$parentDevice" "''${rootDevice#$parentDevice}"
udevadm settle
fi
'';

};

}
# This profile is deprecated, use boot.growPartition directly.
builtins.trace "the profile <nixos/modules/virtualisation/grow-partition.nix> is deprecated, use boot.growPartition instead"
{ }
4 changes: 1 addition & 3 deletions nixos/modules/virtualisation/nova-config.nix
Expand Up @@ -6,7 +6,6 @@ with lib;
imports = [
../profiles/qemu-guest.nix
../profiles/headless.nix
./grow-partition.nix
];

config = {
Expand All @@ -15,8 +14,7 @@ with lib;
autoResize = true;
};

virtualisation.growPartition = true;

boot.growPartition = true;
boot.kernelParams = [ "console=ttyS0" ];
boot.loader.grub.device = "/dev/vda";
boot.loader.timeout = 0;
Expand Down
4 changes: 1 addition & 3 deletions nixos/modules/virtualisation/virtualbox-image.nix
Expand Up @@ -8,8 +8,6 @@ let

in {

imports = [ ./grow-partition.nix ];

options = {
virtualbox = {
baseImageSize = mkOption {
Expand All @@ -23,7 +21,6 @@ in {
};

config = {

system.build.virtualBoxOVA = import ../../lib/make-disk-image.nix {
name = "nixos-ova-${config.system.nixosLabel}-${pkgs.stdenv.system}";

Expand Down Expand Up @@ -71,6 +68,7 @@ in {
autoResize = true;
};

boot.growPartition = true;
boot.loader.grub.device = "/dev/sda";

virtualisation.virtualbox.guest.enable = true;
Expand Down
2 changes: 1 addition & 1 deletion pkgs/tools/misc/cloud-utils/default.nix
Expand Up @@ -6,7 +6,7 @@
stdenv.mkDerivation rec {
# NOTICE: if you bump this, make sure to run
# $ nix-build nixos/release-combined.nix -A nixos.tests.ec2-nixops
# growpart is needed in initrd in nixos/modules/virtualisation/grow-partition.nix
# growpart is needed in initrd in nixos/system/boot/grow-partition.nix
name = "cloud-utils-${version}";
version = "0.30";
src = fetchurl {
Expand Down

0 comments on commit eddf30c

Please sign in to comment.