diff options
author | Dieter Plaetinck <dieter@plaetinck.be> | 2008-12-18 19:43:12 +0100 |
---|---|---|
committer | Dieter Plaetinck <dieter@plaetinck.be> | 2008-12-18 19:43:12 +0100 |
commit | 442e804b78716c9f9bd5a50076b76af608cf74f2 (patch) | |
tree | 34073d294bad70de556350a0fa9b5d792bff6c0e /unofficial/modules/ddeploy/procedures/automatic | |
parent | fc9c98d9c348daa0f082fa59f47516993a70d794 (diff) |
'dieter' is now project 'ddeploy' that aims to be usable to many people
Diffstat (limited to 'unofficial/modules/ddeploy/procedures/automatic')
-rw-r--r-- | unofficial/modules/ddeploy/procedures/automatic | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/unofficial/modules/ddeploy/procedures/automatic b/unofficial/modules/ddeploy/procedures/automatic new file mode 100644 index 0000000..2887e1d --- /dev/null +++ b/unofficial/modules/ddeploy/procedures/automatic @@ -0,0 +1,152 @@ +#!/bin/bash +depend_module yaourt +depend_procedure core base + +var_RUNTIME_PACKAGES="svn" + +phase_preparation=(\ + configure \ + intro \ + sysprep \ + msg_manual \ + runtime_network \ + runtime_svn \ + msg_automatic \ + select_source \ + runtime_packages \ + runtime_yaourt) + +phase_finish=(configure_home msg_report) + + +worker_intro () +{ + notify "Dieter::automatic procedure running..." +} + + +worker_configure () +{ + var_UI_TYPE=${arg_ui_type:-cli} +} + + +worker_msg_manual () +{ + # All things that need to be done manually first + notify "A few manual things need to happen first..." +} + + +worker_msg_automatic () +{ + notify "**** From now on. everything will be automatic. Enjoy the show!" # not true: you need pass for dm_crypt +} + + +worker_runtime_network () +{ + if ask_yesno "Do you want to (re)-configure your networking?" + then + interactive_runtime_network + else + infofy "Ok. skipping network config" + fi +} + + +worker_runtime_svn () +{ + SVN_USERNAME=dieter + ask_password svn #TODO: if user entered incorrect password, the install process will just fail.. + SVN="svn --username $SVN_USERNAME --password $SVN_PASSWORD" + SVN_BASE=https://192.168.1.2/svn/repos + ask_string "Which host are you installing?" desktop-a7nx8 + TARGET_HOST=$ANSWER_STRING #TODO: allow passing cmdline argument (and check with svn info). handle -z $ANSWER_STRING + _accept_ssl_cert +} + + +worker_prepare_disks () +{ + modprobe dm-crypt || die_error "Cannot modprobe dm-crypt" + modprobe -q aes-x86-64 || modprobe aes-i586 || die_error "Cannot modprobe aes-x86-64 or aes-i586" + + # Cleanup whatever state the disk is in (that includes previous, failed runs of this script) + umount /dev/mapper/cryptpool-* 2>/dev/null + vgremove -f cryptpool 2>/dev/null + pvremove /dev/mapper/sda2_crypt 2>/dev/null + cryptsetup luksClose sda2_crypt 2>/dev/null + dd if=/dev/urandom of=/dev/sda bs=512 count=1 + + #TODO: integrate this stuff into the functions in the libs (process_partitions and filesystems, rollback and bailout if needed) + do error checking and handling + #NOTE: i don't think i should quote to prevent globbing, but it does seem to help i think (hard to check as resource is busy and you can't reload kernel partition tables) + sfdisk /dev/sda 2>&1 | grep -v 'not have an msdos signature' << EOF +,10,L,'*' +,,L +EOF + [ $? -gt 0 ] && die_error "Could not sfdisk /dev/sda. Return code is $?" + #TODO: when sfdisk is done, i still have an invalid partition table? + cryptsetup --batch-mode -c aes-xts-plain -y -s 512 luksFormat /dev/sda2 || die_error "Cannot cryptsetup luksFormat /dev/sda2" + cryptsetup luksOpen /dev/sda2 sda2_crypt || die_error "Cannot cryptsetup luksOpen /dev/sda2" + pvcreate /dev/mapper/sda2_crypt || die_error "Cannot pvcreate the PV on the encrypted blockdevice" + vgcreate cryptpool /dev/mapper/sda2_crypt || die_error "Cannot create the VG an the PV on the encrypted blockdevice" + lvcreate -L 2G -n swap cryptpool && \ + lvcreate -L 500M -n tmp cryptpool && \ + lvcreate -L 10G -n home cryptpool && \ + lvcreate -L 10G -n root cryptpool && \ + lvcreate -L 3G -n var cryptpool || die_error "Could not create at least one of the LV's" + for i in home root tmp var + do + mkdir -p $var_TARGET_DIR/$i + mke2fs -j /dev/cryptpool/$i && mount /dev/cryptpool/$i $var_TARGET_DIR/$i || die_error "Could not format or mount $var_TARGET_DIR/$i" + done + + # TODO: swapon the thing and don't forget to swapoff it in the cleanup part above + # TODO: fstab? auto-add to fstab with libs? auto mkdir's on target_dir? + true +} + +worker_package_list () +{ + $SVN export $SVN_BASE/ddm-configs/$TARGET_HOST/trunk/package-list $var_PKG_FILE || die_error "Could not export package list!" + # cat -> there are newlines in it -> var=`echo $var` -> not anymore :) + TARGET_PACKAGES=`cat $var_PKG_FILE` && TARGET_PACKAGES=`echo $TARGET_PACKAGES` || die_error "Could not cat package list. THIS SHOULD NEVER HAPPEN." + true +} + + +worker_install_packages () +{ + target_prepare_pacman core extra community #TODO: it would be better if this was a separate worker, i think + [ -z "$TARGET_PACKAGES" ] && die_error "No packages listed to be installed!" + installpkg +} + + +worker_configure_home () +{ + #checkout from svn + true +} + + +worker_set_clock () +{ + #timezone="Europe/Brussels" + #Not doing anything. hwclock is set already and configs are coming from svn anyway.. + true +} + + +worker_install_bootloader () +{ + install-grub /dev/sda +} + + +worker_runtime_yaourt () +{ + _yaourt_replace_pacman +} + |