mkuserimg.sh revision 1ec61e7ac5fd7553b143231e8d650ef4ba432344
173e933f1f57002d2e593aa7b471811d8837f8767Earl Ou#!/bin/bash
273e933f1f57002d2e593aa7b471811d8837f8767Earl Ou#
373e933f1f57002d2e593aa7b471811d8837f8767Earl Ou# To call this script, make sure make_ext4fs is somewhere in PATH
473e933f1f57002d2e593aa7b471811d8837f8767Earl Ou
573e933f1f57002d2e593aa7b471811d8837f8767Earl Oufunction usage() {
673e933f1f57002d2e593aa7b471811d8837f8767Earl Oucat<<EOT
773e933f1f57002d2e593aa7b471811d8837f8767Earl OuUsage:
873e933f1f57002d2e593aa7b471811d8837f8767Earl Oumkuserimg.sh [-s] SRC_DIR OUTPUT_FILE EXT_VARIANT MOUNT_POINT SIZE [-j <journal_size>]
973e933f1f57002d2e593aa7b471811d8837f8767Earl Ou             [-T TIMESTAMP] [-C FS_CONFIG] [-B BLOCK_LIST_FILE] [FILE_CONTEXTS]
1073e933f1f57002d2e593aa7b471811d8837f8767Earl OuEOT
1173e933f1f57002d2e593aa7b471811d8837f8767Earl Ou}
1273e933f1f57002d2e593aa7b471811d8837f8767Earl Ou
1373e933f1f57002d2e593aa7b471811d8837f8767Earl OuENABLE_SPARSE_IMAGE=
1473e933f1f57002d2e593aa7b471811d8837f8767Earl Ouif [ "$1" = "-s" ]; then
1573e933f1f57002d2e593aa7b471811d8837f8767Earl Ou  ENABLE_SPARSE_IMAGE="-s"
1673e933f1f57002d2e593aa7b471811d8837f8767Earl Ou  shift
1773e933f1f57002d2e593aa7b471811d8837f8767Earl Oufi
1873e933f1f57002d2e593aa7b471811d8837f8767Earl Ou
191792070857f96943ae110869d66f092001ad526eEarl Ouif [ $# -lt 5 ]; then
206e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk  usage
216e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk  exit 1
221792070857f96943ae110869d66f092001ad526eEarl Oufi
2373e933f1f57002d2e593aa7b471811d8837f8767Earl Ou
2473e933f1f57002d2e593aa7b471811d8837f8767Earl OuSRC_DIR=$1
256e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunkif [ ! -d $SRC_DIR ]; then
2673e933f1f57002d2e593aa7b471811d8837f8767Earl Ou  echo "Can not find directory $SRC_DIR!"
2773e933f1f57002d2e593aa7b471811d8837f8767Earl Ou  exit 2
286e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunkfi
296e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk
306e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben BrunkOUTPUT_FILE=$2
316e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben BrunkEXT_VARIANT=$3
326e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben BrunkMOUNT_POINT=$4
336e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben BrunkSIZE=$5
3473e933f1f57002d2e593aa7b471811d8837f8767Earl Oushift; shift; shift; shift; shift
356e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk
3673e933f1f57002d2e593aa7b471811d8837f8767Earl OuJOURNAL_FLAGS=
3773e933f1f57002d2e593aa7b471811d8837f8767Earl Ouif [ "$1" = "-j" ]; then
3873e933f1f57002d2e593aa7b471811d8837f8767Earl Ou  if [ "$2" = "0" ]; then
396e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk    JOURNAL_FLAGS="-J"
406e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk  else
416e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk    JOURNAL_FLAGS="-j $2"
426e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk  fi
436e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk  shift; shift
446e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunkfi
456e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk
466e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben BrunkTIMESTAMP=-1
476e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunkif [[ "$1" == "-T" ]]; then
486e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk  TIMESTAMP=$2
491792070857f96943ae110869d66f092001ad526eEarl Ou  shift; shift
506e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunkfi
516e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk
5273e933f1f57002d2e593aa7b471811d8837f8767Earl OuFS_CONFIG=
5373e933f1f57002d2e593aa7b471811d8837f8767Earl Ouif [[ "$1" == "-C" ]]; then
546e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk  FS_CONFIG=$2
551792070857f96943ae110869d66f092001ad526eEarl Ou  shift; shift
561792070857f96943ae110869d66f092001ad526eEarl Oufi
5773e933f1f57002d2e593aa7b471811d8837f8767Earl Ou
5873e933f1f57002d2e593aa7b471811d8837f8767Earl OuBLOCK_LIST=
5973e933f1f57002d2e593aa7b471811d8837f8767Earl Ouif [[ "$1" == "-B" ]]; then
60cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ou  BLOCK_LIST=$2
616e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk  shift; shift
626e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunkfi
636e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk
646e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben BrunkFC=$1
656e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk
666e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunkcase $EXT_VARIANT in
676e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk  ext4) ;;
686e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk  *) echo "Only ext4 is supported!"; exit 3 ;;
69cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ouesac
70cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ou
716e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunkif [ -z $MOUNT_POINT ]; then
726e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk  echo "Mount point is required"
736e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk  exit 2
746e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunkfi
756e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk
766e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunkif [ -z $SIZE ]; then
77cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ou  echo "Need size of filesystem"
78cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ou  exit 2
796e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunkfi
80cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ou
81cde6ac521216801e835df1c20b68dd21d4fd04a4Earl OuOPT=""
82cde6ac521216801e835df1c20b68dd21d4fd04a4Earl Ouif [ -n "$FC" ]; then
83ca56f8e30a4d91c7b7e6f75a39a1a69801e49cbbEarl Ou  OPT="$OPT -S $FC"
84ca56f8e30a4d91c7b7e6f75a39a1a69801e49cbbEarl Oufi
85ca56f8e30a4d91c7b7e6f75a39a1a69801e49cbbEarl Ouif [ -n "$FS_CONFIG" ]; then
866e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunk  OPT="$OPT -C $FS_CONFIG"
87ca56f8e30a4d91c7b7e6f75a39a1a69801e49cbbEarl Oufi
886e6a524390d8ddebce5de0dcc8ae258e652ec80aRuben Brunkif [ -n "$BLOCK_LIST" ]; then
89  OPT="$OPT -B $BLOCK_LIST"
90fi
91
92MAKE_EXT4FS_CMD="make_ext4fs $ENABLE_SPARSE_IMAGE -T $TIMESTAMP $OPT -l $SIZE $JOURNAL_FLAGS -a $MOUNT_POINT $OUTPUT_FILE $SRC_DIR"
93echo $MAKE_EXT4FS_CMD
94$MAKE_EXT4FS_CMD
95if [ $? -ne 0 ]; then
96  exit 4
97fi
98