diff --git a/roles/usb_lib/files/upload2usb/upload2usb.php b/roles/usb_lib/files/upload2usb/upload2usb.php
index 38b5e0c86..555a40f5a 100644
--- a/roles/usb_lib/files/upload2usb/upload2usb.php
+++ b/roles/usb_lib/files/upload2usb/upload2usb.php
@@ -10,27 +10,25 @@ set_exception_handler(function (Throwable $exception) {
include ("error.php");
});
-
//return the first removable USB drive location
function getTargetUSBDriveLocation () {
- // Get the first removal USB drive using
- // lsblk --output NAME,TRAN,RM,MOUNTPOINT --pairs |grep RM=\"1\" | grep -v MOUNTPOINT=\"\" |grep -oP '[^/]MOUNTPOINT="\K[^"]*' -m 1
- // lsblk --output NAME,TRAN,RM,MOUNTPOINT --pairs |grep RM=\"1\" | grep -v MOUNTPOINT=\"\" | cut -d " " -f 4 | cut -d "=" -f 2
+ // Get the count of storage mounted at /media, and error if there is <>1 otherwise return upload path
- # error if 1<>usb sticks are installed
- $rmv_usb_path_count = shell_exec('lsblk --output NAME,TRAN,RM,MOUNTPOINT --pairs |grep RM=\"1\" | grep -v MOUNTPOINT=\"\" | cut -d " " -f 4 | wc -l');
- if ($rmv_usb_path_count == 0) {
- throw new RuntimeException('0 USB sticks found.
');
- } elseif ($rmv_usb_path_count > 1) {
- throw new RuntimeException('More than 1 USB sticks installed.
');
- }
+ # error if 1<>usb sticks are installed
+ $rmv_usb_path_count = shell_exec('lsblk --output NAME,TRAN,RM,MOUNTPOINT --pairs | cut -d " " -f 4 | grep "^MOUNTPOINT=\"/media" | wc -l');
- $rmv_usb_path = trim(str_replace('"', '', shell_exec('lsblk --output NAME,TRAN,RM,MOUNTPOINT --pairs |grep RM=\"1\" | grep -v MOUNTPOINT=\"\" | cut -d " " -f 4 | cut -d "=" -f 2')));
+ if ($rmv_usb_path_count == 0) {
+ throw new RuntimeException('0 USB sticks found.
');
+ } elseif ($rmv_usb_path_count > 1) {
+ throw new RuntimeException('More than 1 USB sticks installed.
');
+ }
+
+ $rmv_usb_path = trim(str_replace('"', '', shell_exec('lsblk --output NAME,TRAN,RM,MOUNTPOINT --pairs | cut -d " " -f 4 | grep "^MOUNTPOINT=\"/media" | cut -d "=" -f 2')));
if (empty($rmv_usb_path)) {
- throw new RuntimeException('Not able to find USB stick.
');
+ throw new RuntimeException('Not able to find USB stick.
');
} else {
- return $rmv_usb_path . "/";
+ return $rmv_usb_path . "/";
}
}
@@ -42,55 +40,55 @@ function getTargetFolderPath ($create_folder_p) {
$target_folder_path = $parent_dir . $today_folder_name;
if (!file_exists($target_folder_path) && $create_folder_p) {
- mkdir($target_folder_path, 0777) or throw new RuntimeException("Not able to create upload directory.
Make sure 'usb_lib_writable_sticks' is set to 'True'.
");
- }
- return $target_folder_path;
+ mkdir($target_folder_path, 0777) or throw new RuntimeException("Not able to create upload directory.
Make sure 'usb_lib_writable_sticks' is set to 'True'.
");
+ }
+ return $target_folder_path;
}
//return number of files within a specified folder
function getFileCount ($folder_path) {
- return count(glob($folder_path . "/*"));
+ return count(glob($folder_path . "/*"));
}
//check if file mimetype is acceptable for upload
function isFileMimeTypeAcceptable ($file) {
- $mimetype = strtolower(mime_content_type($file));
- $invalid_mimetypes_str = array ("compress", "image/svg+xml", "octet", "text/xml", "xhtml+xml");
- foreach ($invalid_mimetypes_str as $invalid_mt_str) {
- if (str_contains($mimetype, $invalid_mt_str)) {
- error_log('UPLOAD2USB ERROR - MIMETYPE: ' . $mimetype);
- return false;
- }
- }
- return true;
+ $mimetype = strtolower(mime_content_type($file));
+ $invalid_mimetypes_str = array ("compress", "image/svg+xml", "octet", "text/xml", "xhtml+xml");
+ foreach ($invalid_mimetypes_str as $invalid_mt_str) {
+ if (str_contains($mimetype, $invalid_mt_str)) {
+ error_log('UPLOAD2USB ERROR - MIMETYPE: ' . $mimetype);
+ return false;
+ }
+ }
+ return true;
}
//check file content to see if it's unique or not
function isFileContentUnique ($target_folder_path, $file) {
- $file_to_upload_md5 = md5_file($file);
- $usb_dir = array_diff(scandir($target_folder_path), array('..', '.'));
- foreach ($usb_dir as $dir_file) {
- $dir_file = $target_folder_path . "/" . $dir_file;
+ $file_to_upload_md5 = md5_file($file);
+ $usb_dir = array_diff(scandir($target_folder_path), array('..', '.'));
+ foreach ($usb_dir as $dir_file) {
+ $dir_file = $target_folder_path . "/" . $dir_file;
- if (!is_dir($dir_file)) {
- $dir_file_md5 = md5_file($dir_file);
- if ($file_to_upload_md5 == $dir_file_md5) {
- return false;
- }
- }
- }
- return true;
+ if (!is_dir($dir_file)) {
+ $dir_file_md5 = md5_file($dir_file);
+ if ($file_to_upload_md5 == $dir_file_md5) {
+ return false;
+ }
+ }
+ }
+ return true;
}
//return unique filename
function getUniqueFileName ($target_folder_path, $filename) {
- $new_filename = $filename;
- $counter = 1;
- while (file_exists($target_folder_path . "/" . $new_filename)) {
- $counter++;
- $new_filename = pathinfo($filename,8) . '-'. $counter . "." . pathinfo($filename,4);
- }
- return $new_filename;
+ $new_filename = $filename;
+ $counter = 1;
+ while (file_exists($target_folder_path . "/" . $new_filename)) {
+ $counter++;
+ $new_filename = pathinfo($filename,8) . '-'. $counter . "." . pathinfo($filename,4);
+ }
+ return $new_filename;
}
// Check file size - we are not going to check file size for now.
@@ -100,5 +98,4 @@ function getUniqueFileName ($target_folder_path, $filename) {
// }
-
?>
diff --git a/roles/usb_lib/files/usbmount/usbmount b/roles/usb_lib/files/usbmount/usbmount
index 7541b5335..8104564e7 100644
--- a/roles/usb_lib/files/usbmount/usbmount
+++ b/roles/usb_lib/files/usbmount/usbmount
@@ -15,7 +15,7 @@
# PARTICULAR PURPOSE.
# https://github.com/iiab/iiab/blob/master/roles/usb_lib/files/usbmount/copyright
# https://github.com/rbrito/usbmount/blob/master/debian/copyright
-set -e
+#set -e
exec > /dev/null 2>&1
######################################################################
@@ -96,114 +96,136 @@ if [ "$1" = add ]; then
USAGE=$(echo "$DEVINFO" | sed 's/.*[[:blank:]]USAGE="\([^"]*\)".*/\1/g; s/[[:blank:]]*//g;')
if ! echo $USAGE | egrep -q "(filesystem|disklabel)"; then
- log info "$DEVNAME does not contain a filesystem or disklabel"
- exit
+ log debug "/$DEVNAME does not contain a filesystem or disklabel"
+ lockfile-remove /var/run/usbmount/.mount
+ exit
fi
- # Try to use specifications in /etc/fstab first.
+ log debug "/$DEVNAME contains filesystem type $FSTYPE"
+ BOOTFW_DEV=$(/usr/bin/findmnt -no source /boot/firmware)
+ log debug "BOOTFW_DEV $BOOTFW_DEV"
+ ROOT_DEV=$(/usr/bin/findmnt -no source /)
+ log debug "ROOT_DEV $ROOT_DEV"
+ BOOT_DEV=$(/usr/bin/findmnt -no source /boot)
+ log debug "BOOT_DEV $BOOT_DEV"
+
+ if [ $BOOTFW_DEV = /$DEVNAME ]; then
+ log debug "skipping BOOTFS_DEV $BOOTFS_DEV mounted at /boot/firmware"
+ lockfile-remove /var/run/usbmount/.mount
+ exit
+ elif [ $ROOT_DEV = /$DEVNAME ]; then
+ log debug "skipping ROOT_DEV $ROOT_DEV mounted at /"
+ lockfile-remove /var/run/usbmount/.mount
+ exit
+ elif [ $BOOT_DEV = /$DEVNAME ]; then
+ log debug "skipping BOOT_DEV $BOOT_DEV mount as /boot"
+ lockfile-remove /var/run/usbmount/.mount
+ exit
+ fi
+
+ # Try to use specifications in /etc/fstab to skip.
if egrep -q "^[[:blank:]]*$DEVNAME" /etc/fstab; then
- log info "executing command: mount $DEVNAME"
- mount $DEVNAME || log err "mount by DEVNAME with $DEVNAME wasn't successful; return code $?"
-
+ log debug "skipping /$DEVNAME exit"
+ lockfile-remove /var/run/usbmount/.mount
+ exit
elif grep -q "^[[:blank:]]*UUID=$UUID" /etc/fstab; then
- log info "executing command: mount -U $UUID"
- mount -U $UUID || log err "mount by UUID with $UUID wasn't successful; return code $?"
-
+ log debug "skipping $UUID"
+ lockfile-remove /var/run/usbmount/.mount
+ exit
else
- log debug "$DEVNAME contains filesystem type $FSTYPE"
+ log debug "/$DEVNAME contains filesystem type $FSTYPE"
+ fstype=$FSTYPE
+ # Test if the filesystem type is in the list of filesystem
+ # types to mount.
+ if in_list "$fstype" "$FILESYSTEMS"; then
+ # Search an available mountpoint.
+ for v in $MOUNTPOINTS; do
+ if [ -d "$v" ] && ! grep -q "^[^ ][^ ]* *$v " /proc/mounts; then
+ mountpoint="$v"
+ log debug "mountpoint $mountpoint is available for /$DEVNAME"
+ break
+ fi
+ done
+ if [ -n "$mountpoint" ]; then
+ # Determine mount options.
+ options=
+ for v in $FS_MOUNTOPTIONS; do
+ if expr "$v" : "-fstype=$fstype,."; then
+ options="$(echo "$v" | sed 's/^[^,]*,//')"
+ break
+ fi
+ done
+ if [ -n "$MOUNTOPTIONS" ]; then
+ options="$MOUNTOPTIONS${options:+,$options}"
+ fi
- fstype=$FSTYPE
- # Test if the filesystem type is in the list of filesystem
- # types to mount.
- if in_list "$fstype" "$FILESYSTEMS"; then
- # Search an available mountpoint.
- for v in $MOUNTPOINTS; do
- if [ -d "$v" ] && ! grep -q "^[^ ][^ ]* *$v " /proc/mounts; then
- mountpoint="$v"
- log debug "mountpoint $mountpoint is available for $DEVNAME"
- break
- fi
- done
- if [ -n "$mountpoint" ]; then
- # Determine mount options.
- options=
- for v in $FS_MOUNTOPTIONS; do
- if expr "$v" : "-fstype=$fstype,."; then
- options="$(echo "$v" | sed 's/^[^,]*,//')"
- break
- fi
- done
- if [ -n "$MOUNTOPTIONS" ]; then
- options="$MOUNTOPTIONS${options:+,$options}"
- fi
+ # Mount the filesystem.
+ log info "executing command: mount -t$fstype ${options:+-o$options} $DEVNAME $mountpoint"
+ mount "-t$fstype" "${options:+-o$options}" "$DEVNAME" "$mountpoint"
- # Mount the filesystem.
- log info "executing command: mount -t$fstype ${options:+-o$options} $DEVNAME $mountpoint"
- mount "-t$fstype" "${options:+-o$options}" "$DEVNAME" "$mountpoint"
+ # Determine vendor and model.
+ vendor=
+ if [ -r "/sys$DEVPATH/device/vendor" ]; then
+ vendor="`cat \"/sys$DEVPATH/device/vendor\"`"
+ elif [ -r "/sys$DEVPATH/../device/vendor" ]; then
+ vendor="`cat \"/sys$DEVPATH/../device/vendor\"`"
+ elif [ -r "/sys$DEVPATH/device/../manufacturer" ]; then
+ vendor="`cat \"/sys$DEVPATH/device/../manufacturer\"`"
+ elif [ -r "/sys$DEVPATH/../device/../manufacturer" ]; then
+ vendor="`cat \"/sys$DEVPATH/../device/../manufacturer\"`"
+ fi
+ vendor="$(echo "$vendor" | sed 's/^[[:blank:]]\+//; s/[[:blank:]]\+$//')"
- # Determine vendor and model.
- vendor=
- if [ -r "/sys$DEVPATH/device/vendor" ]; then
- vendor="`cat \"/sys$DEVPATH/device/vendor\"`"
- elif [ -r "/sys$DEVPATH/../device/vendor" ]; then
- vendor="`cat \"/sys$DEVPATH/../device/vendor\"`"
- elif [ -r "/sys$DEVPATH/device/../manufacturer" ]; then
- vendor="`cat \"/sys$DEVPATH/device/../manufacturer\"`"
- elif [ -r "/sys$DEVPATH/../device/../manufacturer" ]; then
- vendor="`cat \"/sys$DEVPATH/../device/../manufacturer\"`"
- fi
- vendor="$(echo "$vendor" | sed 's/^[[:blank:]]\+//; s/[[:blank:]]\+$//')"
+ model=
+ if [ -r "/sys$DEVPATH/device/model" ]; then
+ model="`cat \"/sys$DEVPATH/device/model\"`"
+ elif [ -r "/sys$DEVPATH/../device/model" ]; then
+ model="`cat \"/sys$DEVPATH/../device/model\"`"
+ elif [ -r "/sys$DEVPATH/device/../product" ]; then
+ model="`cat \"/sys$DEVPATH/device/../product\"`"
+ elif [ -r "/sys$DEVPATH/../device/../product" ]; then
+ model="`cat \"/sys$DEVPATH/../device/../product\"`"
+ fi
+ model="$(echo "$model" | sed 's/^[[:blank:]]\+//; s/[[:blank:]]\+$//')"
- model=
- if [ -r "/sys$DEVPATH/device/model" ]; then
- model="`cat \"/sys$DEVPATH/device/model\"`"
- elif [ -r "/sys$DEVPATH/../device/model" ]; then
- model="`cat \"/sys$DEVPATH/../device/model\"`"
- elif [ -r "/sys$DEVPATH/device/../product" ]; then
- model="`cat \"/sys$DEVPATH/device/../product\"`"
- elif [ -r "/sys$DEVPATH/../device/../product" ]; then
- model="`cat \"/sys$DEVPATH/../device/../product\"`"
- fi
- model="$(echo "$model" | sed 's/^[[:blank:]]\+//; s/[[:blank:]]\+$//')"
-
- # Run hook scripts; ignore errors.
- export UM_DEVICE="$DEVNAME"
- export UM_MOUNTPOINT="$mountpoint"
- export UM_FILESYSTEM="$fstype"
- export UM_MOUNTOPTIONS="$options"
- export UM_VENDOR="$vendor"
- export UM_MODEL="$model"
- log info "executing command: run-parts /etc/usbmount/mount.d"
- run-parts /etc/usbmount/mount.d || :
- else
- # No suitable mount point found.
- log warning "no mountpoint found for $DEVNAME"
- exit 1
- fi
+ # Run hook scripts; ignore errors.
+ export UM_DEVICE="$DEVNAME"
+ export UM_MOUNTPOINT="$mountpoint"
+ export UM_FILESYSTEM="$fstype"
+ export UM_MOUNTOPTIONS="$options"
+ export UM_VENDOR="$vendor"
+ export UM_MODEL="$model"
+ log info "executing command: run-parts /etc/usbmount/mount.d"
+ run-parts /etc/usbmount/mount.d || :
+ else
+ # No suitable mount point found.
+ log warning "no mountpoint found for $DEVNAME"
+ exit 1
+ fi
fi
- fi
+fi
elif [ "$1" = remove ]; then
# A block or partition device has been removed.
# Test if it is mounted.
while read device mountpoint fstype remainder; do
- if [ "$DEVNAME" = "$device" ]; then
+ if [ "$DEVNAME" = "$device" ]; then
# If the mountpoint and filesystem type are maintained by
# this script, unmount the filesystem.
if in_list "$mountpoint" "$MOUNTPOINTS" &&
- in_list "$fstype" "$FILESYSTEMS"; then
- log info "executing command: umount -l $mountpoint"
- umount -l "$mountpoint"
+ in_list "$fstype" "$FILESYSTEMS"; then
+ log info "executing command: umount -l $mountpoint"
+ umount -l "$mountpoint"
- # Run hook scripts; ignore errors.
- export UM_DEVICE="$DEVNAME"
- export UM_MOUNTPOINT="$mountpoint"
- export UM_FILESYSTEM="$fstype"
- log info "executing command: run-parts /etc/usbmount/umount.d"
- run-parts /etc/usbmount/umount.d || :
- fi
- break
- fi
+ # Run hook scripts; ignore errors.
+ export UM_DEVICE="$DEVNAME"
+ export UM_MOUNTPOINT="$mountpoint"
+ export UM_FILESYSTEM="$fstype"
+ log info "executing command: run-parts /etc/usbmount/umount.d"
+ run-parts /etc/usbmount/umount.d || :
+ fi
+ break
+ fi
done < /proc/mounts
else
log err "unexpected: action '$1'"
diff --git a/roles/usb_lib/tasks/install.yml b/roles/usb_lib/tasks/install.yml
index 35f533652..660df7eb2 100644
--- a/roles/usb_lib/tasks/install.yml
+++ b/roles/usb_lib/tasks/install.yml
@@ -53,7 +53,7 @@
# deb: "{{ iiab_download_url }}/usbmount_0.0.22_all.deb"
# # when: is_debian
-- name: Install lockfile-progs and util-linux for usbmount from OS repo
+- name: Install lockfile-progs and util-linux (findmnt blkid) for usbmount from OS repo
package:
name:
- lockfile-progs