]> gitweb.fluxo.info Git - hydra.git/commitdiff
Provision: RAID support
authorSilvio Rhatto <rhatto@riseup.net>
Fri, 14 Oct 2016 00:56:40 +0000 (21:56 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Fri, 14 Oct 2016 00:56:40 +0000 (21:56 -0300)
share/hydractl/provision

index 04838b750473c0bfe5114f5221fd6d5825b1d5fe..415c0c09b726ea3cae03e94c7a04e23b2d5ca6fb 100755 (executable)
@@ -93,12 +93,12 @@ function hydra_provision_config {
   fi
 
   hydra_user_config   interactive       y                                "Interactive mode? (y/n)"
-  hydra_user_config   device            /dev/sdb                         "Destination device"
+  hydra_user_config   device            /dev/sdb                         "Physical device(s) (more than one auto sets RAID mode)"
   hydra_user_config   swap_size         2000                             "Swap size (in MB, 0 to not create it)"
   hydra_user_config   root_size         20G                              "Size of root partition (-1 for all free space)"
   hydra_user_config   home_size         20G                              "Size of home partition (0 to not create it, -1 for all free space)"
   hydra_user_config   var_size          20G                              "Size of var partition  (0 to not create it, -1 for all free space)"
-  hydra_user_config   encrypt           y                                "Encrypt volumes? (y/n)"
+  hydra_user_config   encrypt           y                                "Encrypt volumes? (if RAID, then encryption is default) (y/n)"
   hydra_user_config   garbage           y                                "Pre-fill volumes with garbage? (y/n)"
   hydra_user_config   random_swap       y                                "Random swap? (y/n)"
   hydra_user_config   disable_zeroing   n                                "Disable zeroing of LVM volumes? (y/n)"
@@ -142,27 +142,52 @@ if [ "$interactive" == "y" ]; then
   read answer
 fi
 
-# Disk partitioning.
-hydra_sudo_run parted -s -- $device mklabel gpt
-hydra_sudo_run parted -s -- $device unit MB mkpart non-fs 2    3
-hydra_sudo_run parted -s -- $device set 1 bios_grub on
+# Check number of devices
+num_devices="`echo $device | wc -w`"
 
-if [ "$encrypt" == "y" ]; then
-  hydra_sudo_run parted -s -- $device unit MB mkpart ext2   3    -1
-  hydra_sudo_run parted -s -- $device set 2 lvm  on
+# RAID: do this instead of regular partitioning.
+if [ "$num_devices" != "1" ]; then
+  # Force encryption and fix device name.
+  encrypt="y"
+  physical_devices="$device"
+  device="/dev/md/$hostname"
+
+  for dev in $physical_devices; do
+    hydra_sudo_run parted -s -- $dev mklabel gpt
+    hydra_sudo_run parted -s -- $dev mkpart  ext4 1M   100%
+    hydra_sudo_run parted -s -- $dev set     1    raid on
+  done
+
+  mdadm --create --verbose $device --level=1 --raid-devices=$num_devices $physical_devices
+
+  # See https://bbs.archlinux.org/viewtopic.php?id=148250
+  hydra_sudo_run dd if=/dev/zero of=$device bs=1M count=32
 
-  boot_device="$device"2
-  syst_device="$device"2
+  boot_device="$device"
+  syst_device="$device"
 else
-  hydra_sudo_run parted -s -- $device unit MB mkpart ext2   3    200
-  hydra_sudo_run parted -s -- $device unit MB mkpart ext2   200  -1
-  hydra_sudo_run parted -s -- $device set 3 lvm  on
+  # Regular disk partitioning.
+  hydra_sudo_run parted -s -- $device mklabel gpt
+  hydra_sudo_run parted -s -- $device unit    MB mkpart    non-fs 2  3
+  hydra_sudo_run parted -s -- $device set     1  bios_grub on
 
-  boot_device="$device"2
-  syst_device="$device"3
+  if [ "$encrypt" == "y" ]; then
+    hydra_sudo_run parted -s -- $device unit MB mkpart ext2 3 -1
+    hydra_sudo_run parted -s -- $device set  2  lvm    on
+
+    boot_device="$device"2
+    syst_device="$device"2
+  else
+    hydra_sudo_run parted -s -- $device unit MB mkpart ext2 3   200
+    hydra_sudo_run parted -s -- $device unit MB mkpart ext2 200 -1
+    hydra_sudo_run parted -s -- $device set  3  lvm    on
 
-  # Use absolute path
-  reboot_device="`blkid | grep ^$boot_device: | cut -d ' ' -f 2 | sed -e 's/"//g'`"
+    boot_device="$device"2
+    syst_device="$device"3
+
+    # Use absolute path
+    reboot_device="`blkid | grep ^$boot_device: | cut -d ' ' -f 2 | sed -e 's/"//g'`"
+  fi
 fi
 
 hydra_sudo_run parted -s -- $device set 2 boot on