X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=grml-crypt;h=772247429ee3c91d4fe851ab08196bd5382fba3a;hb=392bff4b9e5c4d00d1abaab4ffc8b5d23a763b72;hp=47ca33387f861dd78441f551f50d9ca63fa9c2ab;hpb=2807d32a213e937f797120ea813a7dae92cc0481;p=grml-crypt.git diff --git a/grml-crypt b/grml-crypt index 47ca333..7722474 100755 --- a/grml-crypt +++ b/grml-crypt @@ -46,6 +46,7 @@ ADDITIONAL_CRYPTSETUP_ARGS_="" READONLY_SET_='false' ADDITIONAL_MOUNT_ARGS_="" BATCH_MODE_="--batch-mode" +PV_='/usr/bin/pv' ### ### __FUNCTIONS @@ -82,8 +83,8 @@ ACTIONS: Format a device or a file (is created with the given size if it does not exist) with the given filesystem and mount it, if a mountpoint was given. - start - Mount the device/file in the mountpoint. + start [mountpoint] + Mount the device/file in the mountpoint or to a default mountpoint. stop Umount the given mountpoint (umount, luksClose, losetup -d) @@ -125,6 +126,10 @@ function formatDevice { type_="$1" # could be donothing or init ret_=0 + local ddcmd_="dd if=/dev/zero of=$DM_PATH_ bs=1M &>/dev/null" + if [[ -x "$PV_" && $verbose_ -ge 3 ]] ; then + ddcmd_="dd if=/dev/zero bs=1M 2>/dev/null | $PV_ | dd of=$DM_PATH_ bs=1M &>/dev/null" + fi args_="$VERIFY_PW_ $BATCH_MODE_ --key-size $CIPHER_SIZE_ --cipher $CIPHER_ --iter-time $ITERATION_TIME_ $ADDITIONAL_CRYPTSETUP_ARGS_" #args_=`echo "$args_" |tr -s ' '` @@ -135,7 +140,7 @@ function formatDevice if [[ $type_ == 'init' && $OPTIMIZED_MODE_SET_ == 'true' ]]; then echo "finishing optimised initialisation (this could take some time)" # FIXME - execute "dd if=/dev/zero of=$DM_PATH_ bs=1M &>/dev/null" # || \ + execute "$ddcmd_" # || \ # warn "could not finish optimised initialisation properly" ret_=$? # cutted out because of no space left on device error :( @@ -161,13 +166,13 @@ function actionStart { ret_=0 - # no mountpoint, by-by if [[ "$MOUNT_POINT_" == "" ]]; then - printUsage - die 'no mountpoint given' - fi - if [ ! -d "$MOUNT_POINT_" ]; then - die "mountpoint $MOUNT_POINT_ does not exist" + MOUNT_POINT_="/mnt/$DM_NAME_" + else + # error out if mountpoint was given but doesn't exist + if [ ! -d "$MOUNT_POINT_" ]; then + die "mountpoint $MOUNT_POINT_ does not exist" + fi fi # removed due to unionfs problem isLuks does not work with filesystem images # without losetup @@ -193,6 +198,11 @@ function actionStart fi margs_="" $READONLY_SET_ && margs_='-r' + # mountpoint was not given so we use the default one which we need to create first + if [ ! -d "$MOUNT_POINT_" ]; then + execute "mkdir -p '$MOUNT_POINT_'" || die "failed to create mountpoint $MOUNT_POINT_" + fi + udevadm settle execute "mount $margs_ $ADDITIONAL_MOUNT_ARGS_ $DM_PATH_ $MOUNT_POINT_" die } @@ -211,6 +221,21 @@ function actionStop dm_path_=`echo $dm_path_ |awk '{print $1}'` || die "could not get devicemapper name for $tmp_" dprint "dm_path_=\"$dm_path_\"" + # check for symlinks + unset tmp_dm_path_ + for dmapper in /dev/mapper/grml-crypt* ; do + link=$(readlink -f "$dmapper") + dprint "looping device mapper devices, dmapper=$dmapper => link=$link" + if [ "$link" = "$dm_path_" ] ; then + tmp_dm_path_="$dmapper" + fi + done + + if [ -n "$tmp_dm_path_" ] ; then + dm_path_="$tmp_dm_path_" + unset tmp_dm_path_ + fi + dm_name_="${dm_path_##*/}" dprint "dm_name_=\"$dm_name_\"" @@ -220,6 +245,9 @@ function actionStop dprint "device_=\"$device_\"" execute "umount $dm_path_" die "could not unmount $device_" + if [[ "$MOUNT_POINT_" == "/mnt/$dm_name_" ]]; then + rmdir "$MOUNT_POINT_" + fi execute "$CRYPTSETUP_ luksClose $dm_name_" die "could not close $dm_path_" echo "$device_" |grep loop &>/dev/null && execute "losetup -d $device_" \ die "could not delete loop device $device_" || \ @@ -249,6 +277,7 @@ function actionFormat IS_IMAGE_='false' ret_=0 init_='init' + local ddcmd_ if (( $SIZE_ < 3 )); then die "the minimum size of an encrypted luks partition should be 2" @@ -300,7 +329,11 @@ function actionFormat elif [[ $ENTROPY_SOURCE_ != '/dev/zero' ]]; then # default mode echo "SECURE mode (taking $ENTROPY_SOURCE_ as source, this could take some time)" - execute "dd if=$ENTROPY_SOURCE_ of=$TARGET_ bs=1M &>/dev/null" #||\ + ddcmd_="dd if=$ENTROPY_SOURCE_ of=$TARGET_ bs=1M &>/dev/null" + if [[ -x "$PV_" && $verbose_ -ge 3 ]] ; then + ddcmd_="dd if=$ENTROPY_SOURCE_ bs=1M 2>/dev/null | $PV_ | dd of=$TARGET_ bs=1M &>/dev/null" + fi + execute "$ddcmd_" # ||\ # skipped because "no space left on device" from dd # die "could not initialise $TARGET_ with $ENTROPY_SOURCE_" else