X-Git-Url: https://git.grml.org/?a=blobdiff_plain;f=grml-crypt;h=5bcd12e002b2d00426b7625388270835dbba6ed0;hb=fd577270569c91d9d98ce950264d5df2915292d5;hp=2921af1ba51b76065f39f90e9314df9158591c23;hpb=2f50b4b2d64652d422e428f7d9a92502991e766a;p=grml-crypt.git diff --git a/grml-crypt b/grml-crypt index 2921af1..5bcd12e 100755 --- a/grml-crypt +++ b/grml-crypt @@ -36,6 +36,7 @@ ACTION_="" DM_PREFIX_="grml-crypt_" FORCE_='false' FSCK_='false' +FSCK_EXTRA_OPTS_="" ENTROPY_SOURCE_='/dev/urandom' OPTIMIZED_MODE_SET_='false' OPTIMIZING_LEVEL_=0 @@ -46,7 +47,7 @@ ADDITIONAL_CRYPTSETUP_ARGS_="" READONLY_SET_='false' ADDITIONAL_MOUNT_ARGS_="" BATCH_MODE_="--batch-mode" -PV_=/usr/bin/pv +PV_='/usr/bin/pv' ### ### __FUNCTIONS @@ -67,7 +68,10 @@ OPTIONS: -o optimised initialisation mode (should be as secure as the default but faster) -y verifies the passphrase by asking for it twice -f force file overwriting in format mode and/or disable confirmation dialog - -F only for action start: run fsck before mounting the filesystem. Use fsck's -f option if given twice. + -F only for action start: run fsck before mounting the filesystem. + Use fsck's -f option if given twice. + -X Read next argument as a list of options to pass to fsck: + 'grml-crypt -FF -X "-y -T" start /dev/ice' will run fsck with options -y and -T. -m additional arguments to mount -v verbose (show what is going on, v++) -h this help text @@ -83,8 +87,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) @@ -166,13 +170,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 @@ -192,12 +196,17 @@ function actionStart execute "$CRYPTSETUP_ $cargs_ luksOpen $TARGET_ $DM_NAME_" warn || execute "losetup -d $TARGET_" || \ die "could not luksOpen $TARGET_" if [[ "$FSCK_" == "true" ]] ; then - execute "fsck -C $DM_PATH_" || die "fsck failed on $DM_PATH_" + execute "fsck $FSCK_EXTRA_OPTS_ -C $DM_PATH_" || die "fsck failed on $DM_PATH_" elif [[ "$FSCK_" == "trueforce" ]] ; then - execute "fsck -f -C $DM_PATH_" || die "fsck failed on $DM_PATH_" + execute "fsck -f $FSCK_EXTRA_OPTS_ -C $DM_PATH_" || die "fsck failed on $DM_PATH_" 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 } @@ -240,6 +249,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_" || \ @@ -325,7 +337,7 @@ function actionFormat 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_" #||\ + execute "$ddcmd_" # ||\ # skipped because "no space left on device" from dd # die "could not initialise $TARGET_ with $ENTROPY_SOURCE_" else @@ -366,7 +378,7 @@ function actionFormat ### __MAIN ### -while getopts "s:t:rzoyfFm:hvS:C:I:A:" opt; do +while getopts "s:t:rzoyfFm:hvS:C:I:A:X:" opt; do case "$opt" in s) SIZE_="$OPTARG"; SIZE_SET_='true' ;; t) FSTYPE_="$OPTARG" ;; @@ -384,6 +396,7 @@ while getopts "s:t:rzoyfFm:hvS:C:I:A:" opt; do FSCK_='true' fi ;; + X) FSCK_EXTRA_OPTS_="$OPTARG" ;; m) ADDITIONAL_MOUNT_ARGS_="$OPTARG" ;; h) printUsage; exit ;; v) let verbose_=$verbose_+1 ;;