]> gitweb.fluxo.info Git - hydra.git/commitdiff
Provision: sudo support
authorSilvio Rhatto <rhatto@riseup.net>
Thu, 24 Sep 2015 16:16:22 +0000 (13:16 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Thu, 24 Sep 2015 16:16:22 +0000 (13:16 -0300)
lib/hydra/misc
share/config/provision/nas.conf
share/config/provision/router.conf
share/hydractl/provision

index 42750219690edc8eb8fd12075fce683554483e14..2c4450333bb08b03bc2c7e152933d9b4c7aa7824 100644 (file)
@@ -6,6 +6,10 @@ function hydra_set_env {
   export CONFIG="$HOME/.hydra/config"
   export ACTION="$1"
 
+  if [ "`whoami`" != 'root' ]; then
+    SUDO="sudo"
+  fi
+
   if [ ! -z "$HYDRA" ]; then
     export HYDRA_FOLDER="`hydra_eval_parameter $HYDRA`"
     export PREFERENCES="$HOME/.hydra/$HYDRA"
@@ -108,6 +112,12 @@ function hydra_safe_run {
   hydra_exit_on_error $*
 }
 
+# Run a command using sudo and abort on error
+function hydra_sudo_run {
+  $SUDO $*
+  hydra_exit_on_error $*
+}
+
 # Determine the next debian release
 function hydra_next_debian_release {
   local release="$1"
index cab4286d8d73dcd3bdaff09082d9a15053c0b591..591638361ca0698e12d6488168c271eeac631445 100644 (file)
@@ -6,7 +6,7 @@
 interactive="n"                         # Interactive mode?
 encrypt="y"                             # Encrypt volumes?
 garbage="y"                             # Pre-fill volumes with garbage?
-disable_zeroing="y"                     # Disable zeroing of lvm volumes?
+disable_zeroing="n"                     # Disable zeroing of lvm volumes?
 random_swap="y"                         # Random swap?
 arch="amd64"                            # System arch
 version="wheezy"                        # Distro version
index 2eb24dde8cd66204fd01ffcf9e09fc48fab5581d..f3b763ab615b8a824089e37b5a891392f89f8533 100644 (file)
@@ -6,7 +6,7 @@
 interactive="n"                         # Interactive mode?
 encrypt="n"                             # Encrypt volumes?
 garbage="n"                             # Pre-fill volumes with garbage?
-disable_zeroing="y"                     # Disable zeroing of lvm volumes?
+disable_zeroing="n"                     # Disable zeroing of lvm volumes?
 random_swap="n"                         # Random swap?
 arch="amd64"                            # System arch
 version="wheezy"                        # Distro version
index 268e101e836f3ae06f21a5a038e56088b1b2260e..bafc8b6141c0bfee0b4523ad32784dc88c7d1ee4 100755 (executable)
@@ -41,9 +41,9 @@ function hydra_provision_lvcreate {
     # See http://forums.funtoo.org/viewtopic.php?id=1206
     #     https://bbs.archlinux.org/viewtopic.php?id=124615
     if [ "$disable_zeroing" == "y" ]; then
-      hydra_safe_run lvcreate -Z n $space -n $volume $vg
+      hydra_sudo_run lvcreate -Z n $space -n $volume $vg
     else
-      hydra_safe_run lvcreate $space -n $volume $vg
+      hydra_sudo_run lvcreate $space -n $volume $vg
     fi
   fi
 }
@@ -51,7 +51,7 @@ function hydra_provision_lvcreate {
 # Cryptsetup wrapper.
 function hydra_cryptsetup {
   if [ ! -z "$1" ] && [ -b "$1" ]; then
-    hydra_safe_run cryptsetup --cipher aes-xts-plain64:sha256 --key-size 512 --hash sha512 --iter-time 5000 --use-random luksFormat $1
+    hydra_sudo_run cryptsetup --cipher aes-xts-plain64:sha256 --key-size 512 --hash sha512 --iter-time 5000 --use-random luksFormat $1
   fi
 }
 
@@ -66,15 +66,15 @@ function hydra_provision_create_volume {
   if [ "$encrypt" == "y" ]; then
     echo "Creating encrypted $volume device..."
     hydra_cryptsetup /dev/mapper/$vg-$volume
-    hydra_safe_run cryptsetup luksOpen /dev/mapper/$vg-$volume provision-$volume
-    hydra_safe_run mkfs.ext4 /dev/mapper/provision-$volume
+    hydra_sudo_run cryptsetup luksOpen /dev/mapper/$vg-$volume provision-$volume
+    hydra_sudo_run mkfs.ext4 /dev/mapper/provision-$volume
 
     if [ "$volume" == "root" ]; then
       install_device="/dev/mapper/provision-root"
     fi
   else
     echo "Creating $volume device..."
-    mkfs.ext4 /dev/mapper/$vg-$volume
+    hydra_sudo_run mkfs.ext4 /dev/mapper/$vg-$volume
 
     if [ "$volume" == "root" ]; then
       install_device="/dev/mapper/$vg-root"
@@ -154,13 +154,13 @@ if [ "$interactive" == "y" ]; then
 fi
 
 # Disk partitioning.
-hydra_safe_run parted -s -- $device mklabel gpt
-hydra_safe_run parted -s -- $device unit MB mkpart non-fs 2    3
-hydra_safe_run parted -s -- $device unit MB mkpart ext2   3    200
-hydra_safe_run parted -s -- $device unit MB mkpart ext2   200  -1
-hydra_safe_run parted -s -- $device set 1 bios_grub on
-hydra_safe_run parted -s -- $device set 2 boot on
-hydra_safe_run parted -s -- $device set 3 lvm  on
+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 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 1 bios_grub on
+hydra_sudo_run parted -s -- $device set 2 boot on
+hydra_sudo_run parted -s -- $device set 3 lvm  on
 
 # Use absolute paths for devices.
 boot_device="$device"2
@@ -172,16 +172,16 @@ echo "Creating the needed disk volumes..."
 
 if ! pvdisplay $syst_device &> /dev/null; then
   echo "Creating physical volume..."
-  hydra_safe_run pvcreate $syst_device
+  hydra_sudo_run pvcreate $syst_device
 fi
 
 if ! vgdisplay $vg &> /dev/null; then
   echo "Creating volume group..."
-  hydra_safe_run vgcreate $vg $syst_device
+  hydra_sudo_run vgcreate $vg $syst_device
 fi
 
 # Create root partition.
-hydra_safe_run vgchange -a y $vg
+hydra_sudo_run vgchange -a y $vg
 hydra_provision_lvcreate root $root_size
 
 # Create swap partition
@@ -203,33 +203,40 @@ fi
 if [ "$garbage" == "y" ]; then
   echo "Filling volumes with garbage..."
 
-  dd if=/dev/urandom of=/dev/mapper/$vg-root
+  hydra_sudo_run dd if=/dev/urandom of=/dev/mapper/$vg-root
 
   if [ -b "/dev/mapper/$vg-home" ]; then
-    dd if=/dev/urandom of=/dev/mapper/$vg-home
+    hydra_sudo_run dd if=/dev/urandom of=/dev/mapper/$vg-home
   fi
 
   if [ -b "/dev/mapper/$vg-var" ]; then
-    dd if=/dev/urandom of=/dev/mapper/$vg-var
+    hydra_sudo_run dd if=/dev/urandom of=/dev/mapper/$vg-var
   fi
 
   if [ "$swap_size" != "0" ]; then
-    dd if=/dev/urandom of=/dev/mapper/$vg-swap
+    hydra_sudo_run dd if=/dev/urandom of=/dev/mapper/$vg-swap
   fi
 fi
 
+# Make sure that the mountpoint exists
+hydra_sudo_run mkdir -p /tmp/debootstrap
+
 # Setup mountpoint and make sure it's not mounted due to a failed install.
-mkdir -p /tmp/debootstrap
-umount /tmp/debootstrap &> /dev/null
-for folder in proc dev home var boot sys; do
-  umount /tmp/debootstrap/$folder &> /dev/null
-done
+if cat /proc/mounts | cut -d ' ' -f 2 | grep -q "^/tmp/debootstrap$"; then
+  hydra_sudo_run umount /tmp/debootstrap
+
+  for folder in proc dev home var boot sys; do
+    if cat /proc/mounts | cut -d ' ' -f 2 | grep -q "^/tmp/debootstrap/$folder$"; then
+      hydra_sudo_run umount /tmp/debootstrap/$folder
+    fi
+  done
+fi
 
 # Create swap fs.
 if [ "$swap_size" != "0" ] && [ "$random_swap" != "y" ]; then
   hydra_cryptsetup                   /dev/mapper/$vg-swap
-  hydra_safe_run cryptsetup luksOpen /dev/mapper/$vg-swap provision-swap
-  hydra_safe_run mkswap              /dev/mapper/provision-swap
+  hydra_sudo_run cryptsetup luksOpen /dev/mapper/$vg-swap provision-swap
+  hydra_sudo_run mkswap              /dev/mapper/provision-swap
 fi
 
 # Create root fs
@@ -246,120 +253,120 @@ if [ "$var_size" != "0" ]; then
 fi
 
 # Mount root volume.
-hydra_safe_run mount $install_device /tmp/debootstrap/
+hydra_sudo_run mount $install_device /tmp/debootstrap/
 
 # Mount additional volumes.
 if [ "$home_size" != "0" ]; then
   mkdir /tmp/debootstrap/home
 
   if [ "$encrypt" == "y" ]; then
-    hydra_safe_run mount /dev/mapper/provision-home /tmp/debootstrap/home
+    hydra_sudo_run mount /dev/mapper/provision-home /tmp/debootstrap/home
   else
-    hydra_safe_run mount /dev/mapper/$vg-home /tmp/debootstrap/home
+    hydra_sudo_run mount /dev/mapper/$vg-home /tmp/debootstrap/home
   fi
 fi
 
 if [ "$var_size" != "0" ]; then
-  mkdir /tmp/debootstrap/var
+  hydra_sudo_run mkdir /tmp/debootstrap/var
 
   if [ "$encrypt" == "y" ]; then
-    hydra_safe_run mount /dev/mapper/provision-var /tmp/debootstrap/var
+    hydra_sudo_run mount /dev/mapper/provision-var /tmp/debootstrap/var
   else
-    hydra_safe_run mount /dev/mapper/$vg-var /tmp/debootstrap/var
+    hydra_sudo_run mount /dev/mapper/$vg-var /tmp/debootstrap/var
   fi
 fi
 
 # Initial system install.
 echo "Installing base system..."
-hydra_safe_run debootstrap --arch=$arch $version /tmp/debootstrap/ $mirror
+hydra_sudo_run debootstrap --arch=$arch $version /tmp/debootstrap/ $mirror
 
 # Initial configuration.
 echo "Applying initial configuration..."
-mount none -t proc /tmp/debootstrap/proc
-mount none -t sysfs /tmp/debootstrap/sys
-mount -o bind /dev/ /tmp/debootstrap/dev
-echo LANG=C > /tmp/debootstrap/etc/default/locale
+hydra_sudo_run mount none -t proc /tmp/debootstrap/proc
+hydra_sudo_run mount none -t sysfs /tmp/debootstrap/sys
+hydra_sudo_run mount -o bind /dev/ /tmp/debootstrap/dev
+echo LANG=C | $SUDO tee /tmp/debootstrap/etc/default/locale
 
 # Resolver configuration.
-echo "domain $domain" > /tmp/debootstrap/etc/resolv.conf
-echo "search $hostname.$domain" >> /tmp/debootstrap/etc/resolv.conf
-grep nameserver /etc/resolv.conf >> /tmp/debootstrap/etc/resolv.conf
+echo "domain $domain"            | $SUDO tee    /tmp/debootstrap/etc/resolv.conf
+echo "search $hostname.$domain"  | $SUDO tee -a /tmp/debootstrap/etc/resolv.conf
+grep nameserver /etc/resolv.conf | $SUDO tee -a /tmp/debootstrap/etc/resolv.conf
 
 # Hostname configuration.
-echo $hostname.$domain > /tmp/debootstrap/etc/hostname
-echo "127.0.0.1 localhost" >> /tmp/debootstrap/etc/hosts
-echo "127.0.0.1 $hostname $hostname.$domain" >> /tmp/debootstrap/etc/hosts
+echo $hostname.$domain                       | $SUDO tee    /tmp/debootstrap/etc/hostname
+echo "127.0.0.1 localhost"                   | $SUDO tee -a /tmp/debootstrap/etc/hosts
+echo "127.0.0.1 $hostname $hostname.$domain" | $SUDO tee -a /tmp/debootstrap/etc/hosts
 
 # Invert hostname contents to avoid http://projects.puppetlabs.com/issues/2533
-tac /tmp/debootstrap/etc/hosts > /tmp/debootstrap/etc/hosts.new
-mv /tmp/debootstrap/etc/hosts.new /tmp/debootstrap/etc/hosts
+tac /tmp/debootstrap/etc/hosts | $SUDO tee /tmp/debootstrap/etc/hosts.new
+hydra_sudo_run mv /tmp/debootstrap/etc/hosts.new /tmp/debootstrap/etc/hosts
 
 # Initial upgrade.
 echo "Applying initial upgrades..."
-chroot /tmp/debootstrap/ apt-get update
-chroot /tmp/debootstrap/ apt-get upgrade -y
-chroot /tmp/debootstrap/ apt-get install locales cryptsetup lvm2 initramfs-tools -y
+hydra_sudo_run chroot /tmp/debootstrap/ apt-get update
+hydra_sudo_run chroot /tmp/debootstrap/ apt-get upgrade -y
+hydra_sudo_run chroot /tmp/debootstrap/ apt-get install locales cryptsetup lvm2 initramfs-tools -y
 
 # Crypttab.
 echo "Configuring crypttab..."
 echo "# <target name> <source device>   <key file>  <options>" > /tmp/debootstrap/etc/crypttab
 
 if [ "$encrypt" == "y" ]; then
-  cat > /tmp/debootstrap/etc/crypttab <<-EOF
+  cat <<-EOF | $SUDO tee /tmp/debootstrap/etc/crypttab
 root            /dev/mapper/$vg-root      none            luks
 EOF
 fi
 
 if [ "$home_size" != "0" ] && [ "$encrypt" == "y" ]; then
-  cat >> /tmp/debootstrap/etc/crypttab <<-EOF
+  cat <<-EOF | $SUDO tee -a /tmp/debootstrap/etc/crypttab
 home            /dev/mapper/$vg-home      none            luks
 EOF
 fi
 
 if [ "$var_size" != "0" ] && [ "$encrypt" == "y" ]; then
-  cat >> /tmp/debootstrap/etc/crypttab <<-EOF
+  cat <<-EOF | $SUDO tee -a /tmp/debootstrap/etc/crypttab
 var             /dev/mapper/$vg-var       none            luks
 EOF
 fi
 
 if [ "$swap_size" != "0" ] && [ "$random_swap" == "y" ]; then
-  cat >> /tmp/debootstrap/etc/crypttab <<-EOF
+  cat <<-EOF | $SUDO tee -a /tmp/debootstrap/etc/crypttab
 swap            /dev/mapper/$vg-swap      /dev/random     swap,cipher=aes-xts-plain64:sha256
 EOF
 fi
 
 if [ "$swap_size" != "0" ] && [ "$random_swap" != "y" ]; then
-  cat >> /tmp/debootstrap/etc/crypttab <<-EOF
+  cat <<-EOF | $SUDO tee -a /tmp/debootstrap/etc/crypttab
 swap            /dev/mapper/$vg-swap      none        luks,swap
 EOF
 fi
 
 # Fstab.
 echo "Configuring fstab..."
-echo "" > /tmp/debootstrap/etc/fstab
+echo "" | hydra_safe_run tee /tmp/debootstrap/etc/fstab
 if [ "$swap_size" != "0" ]; then
-  cat >> /tmp/debootstrap/etc/fstab <<-EOF
+  cat <<-EOF | $SUDO tee -a /tmp/debootstrap/etc/fstab
 /dev/mapper/swap      none           swap  sw                                 0 0
 EOF
 fi
 
 if [ "$encrypt" == "y" ]; then
-  cat >> /tmp/debootstrap/etc/fstab <<-EOF
+  cat <<-EOF | $SUDO tee -a /tmp/debootstrap/etc/fstab
 /dev/mapper/root      /              ext4  defaults,errors=remount-ro         0 1
 EOF
 else
-  cat >> /tmp/debootstrap/etc/fstab <<-EOF
+  cat <<-EOF | $SUDO tee -a /tmp/debootstrap/etc/fstab
 /dev/mapper/$vg-root   /              ext4  defaults,errors=remount-ro         0 1
 EOF
 fi
 
 if [ "$home_size" != "0" ]; then
   if [ "$encrypt" == "y" ]; then
-  cat >> /tmp/debootstrap/etc/fstab <<-EOF
+  cat <<-EOF | $SUDO tee -a /tmp/debootstrap/etc/fstab
 /dev/mapper/home      /home          ext4  defaults,errors=remount-ro         0 2
 EOF
   else
-  cat >> /tmp/debootstrap/etc/fstab <<-EOF
+  cat <<-EOF | $SUDO tee -a /tmp/debootstrap/etc/fstab
 /dev/mapper/$vg-home   /home          ext4  defaults,errors=remount-ro         0 2
 EOF
   fi
@@ -367,11 +374,11 @@ fi
 
 if [ "$var_size" != "0" ]; then
   if [ "$encrypt" == "y" ]; then
-  cat >> /tmp/debootstrap/etc/fstab <<-EOF
+  cat <<-EOF | $SUDO tee -a /tmp/debootstrap/etc/fstab
 /dev/mapper/var       /var           ext4  defaults,errors=remount-ro         0 2
 EOF
   else
-  cat >> /tmp/debootstrap/etc/fstab <<-EOF
+  cat <<-EOF | $SUDO tee -a /tmp/debootstrap/etc/fstab
 /dev/mapper/$vg-var    /var           ext4  defaults,errors=remount-ro         0 2
 EOF
   fi
@@ -380,17 +387,17 @@ fi
 # Grub.
 if [ "$grub" == "y" ]; then
   echo "Boot device setup..."
-  hydra_safe_run mkfs.ext4 $boot_device
-  hydra_safe_run mount $boot_device /tmp/debootstrap/boot
-  echo "$reboot_device /boot ext4 defaults,errors=remount-ro 0 2" >> /tmp/debootstrap/etc/fstab
+  hydra_sudo_run mkfs.ext4 $boot_device
+  hydra_sudo_run mount $boot_device /tmp/debootstrap/boot
+  echo "$reboot_device /boot ext4 defaults,errors=remount-ro 0 2" | hydra_safe_run tee -a /tmp/debootstrap/etc/fstab
 
   echo "Setting up GRUB..."
-  hydra_safe_run chroot /tmp/debootstrap/ apt-get install grub-pc -y
+  hydra_sudo_run chroot /tmp/debootstrap/ apt-get install grub-pc -y
 fi
 
 # Kernel.
 echo "Installing kernel..."
-cat > /tmp/debootstrap/etc/initramfs-tools/modules <<-EOF
+cat <<-EOF | $SUDO tee /tmp/debootstrap/etc/initramfs-tools/modules
 dm-mod
 dm-crypt
 dm-raid
@@ -399,7 +406,7 @@ twofish
 sha256
 EOF
 
-cat > /tmp/debootstrap/etc/kernel-img.conf <<-EOF
+cat <<-EOF | $SUDO tee /tmp/debootstrap/etc/kernel-img.conf
 do_initrd = Yes
 EOF
 
@@ -410,33 +417,33 @@ else
 fi
 
 if [ "$version" == "squeeze" ]; then
-  hydra_safe_run chroot /tmp/debootstrap apt-get install linux-image-2.6-vserver-$kernel_arch -y
+  hydra_sudo_run chroot /tmp/debootstrap apt-get install linux-image-2.6-vserver-$kernel_arch -y
 else
-  hydra_safe_run chroot /tmp/debootstrap apt-get install linux-image-$kernel_arch -y
+  hydra_sudo_run chroot /tmp/debootstrap apt-get install linux-image-$kernel_arch -y
 fi
 
 # Initramfs.
 echo "Creating initramfs..."
-hydra_safe_run chroot /tmp/debootstrap update-initramfs -v -u
+hydra_sudo_run chroot /tmp/debootstrap update-initramfs -v -u
 
 # Utils.
 echo "Installing basic utilities..."
-chroot /tmp/debootstrap apt-get install screen cron lsb-release openssl -y
+hydra_sudo_run chroot /tmp/debootstrap apt-get install screen cron lsb-release openssl -y
 
 # Ssh.
 echo "Installing OpenSSH daemon..."
-chroot /tmp/debootstrap apt-get install openssh-server -y
+hydra_sudo_run chroot /tmp/debootstrap apt-get install openssh-server -y
 
 echo "OpenSSH fingerprints:"
-chroot /tmp/debootstrap ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub
-chroot /tmp/debootstrap ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
+hydra_sudo_run chroot /tmp/debootstrap ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub
+hydra_sudo_run chroot /tmp/debootstrap ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
 
 # Accounts.
 echo "Installing sudo..."
-chroot /tmp/debootstrap apt-get install sudo -y
+hydra_sudo_run chroot /tmp/debootstrap apt-get install sudo -y
 
 echo "Choose a root password."
-chroot /tmp/debootstrap passwd root
+hydra_sudo_run chroot /tmp/debootstrap passwd root
 
 cat <<-EOF