diff --git a/contrib/populate-extfs.sh b/contrib/populate-extfs.sh index b1d3d1f8cd45bd7d0a09973f7b8b83752a7c166f..173b0a568f3fdbc48b4a17d274fd3a03840f14a9 100755 --- a/contrib/populate-extfs.sh +++ b/contrib/populate-extfs.sh @@ -3,10 +3,13 @@ # This script uses debugfs command to populate the ext2/3/4 filesystem # from a given directory. # +# Added mode, uid and gid config function by OpenHarmony team. +export LANG=en_US.UTF-8 +export LANGUAGE=en_US:en do_usage () { cat << _EOF -Usage: populate-extfs.sh +Usage: populate-extfs.sh Create an ext2/ext3/ext4 filesystem from a directory or file source: The source directory or file @@ -16,17 +19,71 @@ _EOF exit 1 } -[ $# -ne 2 ] && do_usage +CFGFILE_CNT=5 +FILEMODE_IDX=2 +FILEU_IDX=3 +FILEG_IDX=4 +_NEW_FILEMODE=0 +_NEW_FILEUID=0 +_NEW_FILEGID=0 + +declare -a CONFIG_ARRAY + +do_parsecfgfile () { + i=0 + while read _BINFILE_ _FILETYPE_ _FILEMODE_ _FILEUID_ _FILEGID_ + do + CONFIG_ARRAY[${i}]=${_BINFILE_} + i=$[$i+1] + CONFIG_ARRAY[${i}]=${_FILETYPE_} + i=$[$i+1] + CONFIG_ARRAY[${i}]=${_FILEMODE_} + i=$[$i+1] + CONFIG_ARRAY[${i}]=${_FILEUID_} + i=$[$i+1] + CONFIG_ARRAY[${i}]=${_FILEGID_} + i=$[$i+1] + done < ${CFGFILE} +} + +do_getfilecfgmode () { + i=0 + _NEW_FILEMODE_=$2 + _NEW_FILEUID_=0 + _NEW_FILEGID_=0 + while [ $i -lt ${#CONFIG_ARRAY[@]} ] + do + if [ "$1" == "${CONFIG_ARRAY[$i]}" ]; then + # Change file mode from OCT to HEX. + _NEW_FILEMODE_=$(echo "obase=16;$((0x$MODE & (~07777) | 0${CONFIG_ARRAY[$i+${FILEMODE_IDX}]}))"|bc) + _NEW_FILEUID_=${CONFIG_ARRAY[$i+${FILEU_IDX}]} + _NEW_FILLEGID_=${CONFIG_ARRAY[$i+${FILEG_IDX}]} + return 0 + fi + i=$[$i+${CFGFILE_CNT}] + done +} + +[ $# -ne 3 ] && do_usage SRCDIR=${1%%/} DEVICE=$2 +CFGFILE=$3 + +# parse config file +do_parsecfgfile # Find where is the debugfs command if not found in the env. if [ -z "$DEBUGFS" ]; then CONTRIB_DIR=$(dirname $(readlink -f $0)) DEBUGFS="$CONTRIB_DIR/../debugfs/debugfs" + DEBUGFS=debugfs fi +# "debugfs" command check. +command -v debugfs >/dev/null 2>&1 || \ +{ echo >&2 "debugfs is required, please install by \"apt-get install e2fsprogs\". Aborting."; exit 1; } + { CWD="/" find $SRCDIR | while read FILE; do @@ -72,6 +129,10 @@ fi ;; esac + do_getfilecfgmode ${FILE#$SRCDIR} $MODE $U $G + MODE=${_NEW_FILEMODE_} + U=${_NEW_FILEUID_} + G=${_NEW_FILEGID_} # Set the file mode echo "sif $TGT mode 0x$MODE"