1 #!/bin/bash 2 # 3 # To call this script, make sure make_ext4fs is somewhere in PATH 4 5 function usage() { 6 cat<<EOT 7 Usage: 8 mkuserimg.sh [-s] SRC_DIR OUTPUT_FILE EXT_VARIANT MOUNT_POINT SIZE [-j <journal_size>] 9 [-T TIMESTAMP] [-C FS_CONFIG] [-B BLOCK_LIST_FILE] [FILE_CONTEXTS] 10 EOT 11 } 12 13 ENABLE_SPARSE_IMAGE= 14 if [ "$1" = "-s" ]; then 15 ENABLE_SPARSE_IMAGE="-s" 16 shift 17 fi 18 19 if [ $# -lt 5 ]; then 20 usage 21 exit 1 22 fi 23 24 SRC_DIR=$1 25 if [ ! -d $SRC_DIR ]; then 26 echo "Can not find directory $SRC_DIR!" 27 exit 2 28 fi 29 30 OUTPUT_FILE=$2 31 EXT_VARIANT=$3 32 MOUNT_POINT=$4 33 SIZE=$5 34 shift; shift; shift; shift; shift 35 36 JOURNAL_FLAGS= 37 if [ "$1" = "-j" ]; then 38 if [ "$2" = "0" ]; then 39 JOURNAL_FLAGS="-J" 40 else 41 JOURNAL_FLAGS="-j $2" 42 fi 43 shift; shift 44 fi 45 46 TIMESTAMP=-1 47 if [[ "$1" == "-T" ]]; then 48 TIMESTAMP=$2 49 shift; shift 50 fi 51 52 FS_CONFIG= 53 if [[ "$1" == "-C" ]]; then 54 FS_CONFIG=$2 55 shift; shift 56 fi 57 58 BLOCK_LIST= 59 if [[ "$1" == "-B" ]]; then 60 BLOCK_LIST=$2 61 shift; shift 62 fi 63 64 FC=$1 65 66 case $EXT_VARIANT in 67 ext4) ;; 68 *) echo "Only ext4 is supported!"; exit 3 ;; 69 esac 70 71 if [ -z $MOUNT_POINT ]; then 72 echo "Mount point is required" 73 exit 2 74 fi 75 76 if [ -z $SIZE ]; then 77 echo "Need size of filesystem" 78 exit 2 79 fi 80 81 OPT="" 82 if [ -n "$FC" ]; then 83 OPT="$OPT -S $FC" 84 fi 85 if [ -n "$FS_CONFIG" ]; then 86 OPT="$OPT -C $FS_CONFIG" 87 fi 88 if [ -n "$BLOCK_LIST" ]; then 89 OPT="$OPT -B $BLOCK_LIST" 90 fi 91 92 MAKE_EXT4FS_CMD="make_ext4fs $ENABLE_SPARSE_IMAGE -T $TIMESTAMP $OPT -l $SIZE $JOURNAL_FLAGS -a $MOUNT_POINT $OUTPUT_FILE $SRC_DIR" 93 echo $MAKE_EXT4FS_CMD 94 $MAKE_EXT4FS_CMD 95 if [ $? -ne 0 ]; then 96 exit 4 97 fi 98