From 3f22158beb930cc341306352aa0a4ad3b50e7b27 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 26 Mar 2018 11:37:28 +0200 Subject: [rfs-stage32] setup_partitions: Use properly quoted arguments + arrays --- .../opt/openslx/scripts/systemd-setup_partitions | 57 ++++++++++------------ 1 file changed, 27 insertions(+), 30 deletions(-) (limited to 'core/rootfs/rootfs-stage32/data/opt/openslx') diff --git a/core/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions b/core/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions index fea561d1..4af0d62e 100755 --- a/core/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions +++ b/core/rootfs/rootfs-stage32/data/opt/openslx/scripts/systemd-setup_partitions @@ -35,24 +35,27 @@ delalltmp () { } trap delalltmp EXIT -mount_options () { +# get_mount_options +get_mount_options () { case "$1" in ext2) - echo "-o nocheck" + declare -ag "${2}=(-o nocheck)" ;; ext4) - echo "-o errors=remount-ro,data=ordered,relatime,quota" + declare -ag "${2}=(-o 'errors=remount-ro,data=ordered,relatime,quota')" ;; + *) + declare -ag "${2}=()" esac } # General formatter for the /tmp partition on a local harddisk format_disk () { - MOUNT_OPTIONS_SET_BY_FORMAT_DISK="" # Global var! + declare -ag MOUNT_OPTIONS_SET_BY_FORMAT_DISK=() # Global var! local target="$1" local fslist="xfs jfs ext3 ext2 ext4" local fs - local path + declare -a fopt [ $# -ge 2 ] && fslist="$2" for fs in $fslist ; do if grep -q "\\b${fs}\\b" "/proc/filesystems"; then @@ -67,30 +70,24 @@ format_disk () { fi if which "mkfs.$fs" ; then case "$fs" in - xfs) - fopt="-f" + xfs|reiserfs) + fopt=("-f") ;; - ext2) - fopt="-F" - ;; - ext3) - fopt="-F" + ext2|ext3) + fopt=("-F") ;; ext4) - fopt="-F -b 4096 -O extent,huge_file,flex_bg,metadata_csum,64bit,dir_nlink,extra_isize,quota -E quotatype=usrquota:prjquota -I 256" - ;; - reiserfs) - fopt="-f" + fopt=(-F -b 4096 -O "extent,huge_file,flex_bg,metadata_csum,64bit,dir_nlink,extra_isize,quota" -E "quotatype=usrquota:prjquota" -I 256) ;; jfs) - fopt="" + fopt=() ;; *) - fopt="" + fopt=() ;; esac - MOUNT_OPTIONS_SET_BY_FORMAT_DISK=$(mount_options "$fs") - "mkfs.$fs" ${fopt} "${target}" && return 0 # Success! + get_mount_options "$fs" MOUNT_OPTIONS_SET_BY_FORMAT_DISK + "mkfs.$fs" "${fopt[@]}" "${target}" && return 0 # Success! fi done return 1 @@ -99,36 +96,36 @@ format_disk () { mount_temp () { local PRE=$(pwd) if ! cd /tmp; then - mount_temp_fallback $@ + mount_temp_fallback "$@" return $? fi - mount $@ /tmp || return 1 + mount "$@" /tmp || return 1 chmod a+rwxt /tmp # Move stuff from working directory, which is old /tmp, to new /tmp just mounted mv ./* ./.[!.]* ./..?* /tmp/ 2> /dev/null local OLD=$(LANG=C ls -alh | grep -v -E ' \.\.?$' | grep -v '^total') [ -n "$OLD" ] && echo -- "Leftovers:" && echo -- "$OLD" - cd "$PRE" + cd "$PRE" || true } mount_temp_fallback () { mkdir -p /tmptmp mv /tmp/* /tmp/.* /tmptmp/ 2> /dev/null - mount $@ /tmp || return 1 + mount "$@" /tmp || return 1 chmod a+rwxt /tmp mv /tmptmp/* /tmptmp/.* /tmp/ rmdir /tmptmp return 0 } -fdisk -l | grep '^/dev/' > "$PARTITION_FILE" +/opt/openslx/sbin/fdisk -l | grep '^/dev/' > "$PARTITION_FILE" if [ ! -s "$PARTITION_FILE" ]; then udevadm trigger sleep 3 udevadm trigger udevadm settle - fdisk -l | grep '^/dev/' > "$PARTITION_FILE" + /opt/openslx/sbin/fdisk -l | grep '^/dev/' > "$PARTITION_FILE" fi echo "Partitions:" @@ -178,7 +175,7 @@ HAVE_TEMP=no for PART_DEV in $(get_all_with_id "44"); do # check for supported filesystem and formatter if format_disk "$PART_DEV"; then - mount_temp "$MOUNT_OPTIONS_SET_BY_FORMAT_DISK" "$PART_DEV" || continue + mount_temp "${MOUNT_OPTIONS_SET_BY_FORMAT_DISK[@]}" "$PART_DEV" || continue echo -e "${PART_DEV}\t/tmp\t\tauto\t\tnoexec\t 0 0" >> "/etc/fstab" HAVE_TEMP=yes break @@ -195,7 +192,7 @@ done # special partition 45 (persistent scratch) to $MOUNT_POINT_45 HAVE_PARTITION_45=no -mopts=$(mount_options ext4) +get_mount_options "ext4" mopts # try all the ID45 partitions until one succeeds, from large to small for PART_DEV in $(get_all_with_id "45"); do mkdir -p "$MOUNT_POINT_45" @@ -244,7 +241,7 @@ for PART_DEV in $(get_all_with_id "45"); do fi fi # try to mount - if ! mount -v -t ext4 $mopts "${PART_DEV}" "$MOUNT_POINT_45"; then + if ! mount -v -t ext4 "${mopts[@]}" "${PART_DEV}" "$MOUNT_POINT_45"; then # failed, try to format gettmp "logfile" if ! format_disk "$PART_DEV" "ext4" &> "$logfile"; then @@ -252,7 +249,7 @@ for PART_DEV in $(get_all_with_id "45"); do continue fi gettmp "logfile" - if ! mount -v -t ext4 $mopts "${PART_DEV}" "$MOUNT_POINT_45" &> "$logfile"; then + if ! mount -v -t ext4 "${mopts[@]}" "${PART_DEV}" "$MOUNT_POINT_45" &> "$logfile"; then slxlog "partition-45-newmount" "Cannot mount $PART_DEV with ext4 right after formatting" "$logfile" continue fi -- cgit v1.2.3-55-g7522