From patchwork Sat Mar 2 10:46:41 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [RFC,1/2] e2fsprogs: add populate-extfs.sh Date: Sat, 02 Mar 2013 10:46:41 -0000 From: Robert Yang X-Patchwork-Id: 45415 Message-Id: To: Cc: dvhart@linux.intel.com This script is originally from Darren Hart, it will be used for creating the ext* filesystem from a given directory, which will replace the genext2fs in image_types.bbclass at the moment, we may use the mke2fs to replace this script again when it has the initial directory support. Changes of the script: * Rename it from mkdebugfs.sh to populate-extfs.sh * Add a simple usage * Add checking for the number of the parameters * Add the "regular empty file" and "fifo" file type * Set mode, uid and gid for the file * Save the command lines to a file and batch run them * Change the error message * Improve the performance [YOCTO #3848] Signed-off-by: Darren Hart Signed-off-by: Robert Yang --- .../e2fsprogs/e2fsprogs-1.42.7/populate-extfs.sh | 69 ++++++++++++++++++++++ .../recipes-devtools/e2fsprogs/e2fsprogs_1.42.7.bb | 2 + 2 files changed, 71 insertions(+) create mode 100644 meta/recipes-devtools/e2fsprogs/e2fsprogs-1.42.7/populate-extfs.sh diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs-1.42.7/populate-extfs.sh b/meta/recipes-devtools/e2fsprogs/e2fsprogs-1.42.7/populate-extfs.sh new file mode 100644 index 0000000..638bd74 --- /dev/null +++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs-1.42.7/populate-extfs.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +do_usage () { + cat << _EOF +Usage: populate-extfs.sh +Create an ext2/ext3/ext4 filesystem from a directory or file + + source: The source directory or file + device: The target device + +_EOF + exit 1 +} + +[ $# -ne 2 ] && do_usage + +SRCDIR=$1 +DEVICE=$2 +DEBUGFS="debugfs" + +{ + CWD="/" + find $SRCDIR | while read FILE; do + TGT="${FILE##*/}" + DIR="${FILE#$SRCDIR}" + DIR="${DIR%$TGT}" + + # Skip the root dir + [ ! -z "$TGT" ] || continue + + if [ "$DIR" != "$CWD" ]; then + echo "cd $DIR" + CWD="$DIR" + fi + + # Only stat once since stat is a time consuming command + STAT=$(stat -c "TYPE=\"%F\";DEVNO=\"%t %T\";MODE=\"%f\";U=\"%u\";G=\"%g\"" $FILE) + eval $STAT + + case $TYPE in + "directory") + echo "mkdir $TGT" + ;; + "regular file" | "regular empty file") + echo "write $FILE $TGT" + ;; + "symbolic link") + LINK_TGT=$(readlink $FILE) + echo "symlink $TGT $LINK_TGT" + ;; + "block special file" | "character special file") + echo "mknod $TGT b $DEVNO" + ;; + "fifo") + echo "mknod $TGT p" + ;; + *) + echo "Unknown/unhandled file type '$TYPE' file: $FILE" 1>&2 + ;; + esac + + # Set the file mode + echo "sif $TGT mode 0x$MODE" + + # Set uid and gid + echo "sif $TGT uid $U" + echo "sif $TGT gid $G" + done +} | $DEBUGFS -w -f - $DEVICE diff --git a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.7.bb b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.7.bb index 9e22563..9b65184 100644 --- a/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.7.bb +++ b/meta/recipes-devtools/e2fsprogs/e2fsprogs_1.42.7.bb @@ -4,6 +4,7 @@ PR = "r0" SRC_URI += "file://acinclude.m4 \ file://remove.ldconfig.call.patch \ + file://populate-extfs.sh \ " SRC_URI[md5sum] = "a1ec22ef003688dae9f76c74881b22b9" @@ -41,6 +42,7 @@ do_install_append () { mv ${D}${base_libdir}/e2initrd_helper ${D}${libdir} mv ${D}${base_libdir}/pkgconfig ${D}${libdir} fi + install -m 0755 ${WORKDIR}/populate-extfs.sh ${D}${bindir} } RDEPENDS_e2fsprogs = "e2fsprogs-badblocks"