Include pre script to recovery image if exists
[platform/core/system/upgrade-tools.git] / recovery / scripts / generate_package.sh
1 #!/bin/bash
2
3 function __setup__() {
4         TOTA_UPG_DIR="$(readlink -m $1)"
5         TARGET_DIR="$TOTA_UPG_DIR/recovery/target/$2"
6         if [ ! -d "$TARGET_DIR" ]; then
7                 echo "[ERROR] : $TARGET_DIR not exist, please check tota_upg_path and target"
8                 exit
9         fi
10
11         TEMP_DIR="$TARGET_DIR/tmp"
12         RESULT_DIR="$TARGET_DIR/result"
13         BOOT_DIR="$TARGET_DIR/boot"
14         PLATFORM_DIR="$TARGET_DIR/platform"
15         CONFIG_DIR="$TARGET_DIR/cfg"
16
17         CONFIG_NAME="recovery.cfg"
18         IMAGE_NAME="tizen-recovery.img"
19         PRE_SCRIPT_NAME="pre.sh"
20
21         CONFIG_PATH="$CONFIG_DIR/$CONFIG_NAME"
22         PRE_SCRIPT_PATH="$CONFIG_DIR/$PRE_SCRIPT_NAME"
23
24         # Setup prerequiste
25         rm -rf $TEMP_DIR $RESULT_DIR
26         mkdir -p $TEMP_DIR $RESULT_DIR
27
28         echo "[INFO] Target directory : $TARGET_DIR"
29         echo "[INFO] Result directory : $RESULT_DIR"
30 }
31
32 function __unpack__() {
33         image_dirs=("$BOOT_DIR/*.tar.gz" "$PLATFORM_DIR/*.tar.gz")
34
35         for image_dir in ${image_dirs[@]}; do
36                 for image in $image_dir; do
37                         tar -zvxf $image --directory=$TEMP_DIR
38                         if [ $? -ne 0 ]; then
39                                 echo "[ERROR] Failed to extract $image, please check image file"
40                                 exit
41                         fi
42                         echo "[INFO] Success to extract : $image"
43                 done
44         done
45 }
46
47 function __pack__() {
48         BINARY_LIST="$CONFIG_NAME"
49         while read LABEL BINARY DEV || [ -n "$LABEL" ]
50         do
51                 # Ignore empty or comment line
52                 if [ -z "$LABEL" ] || [[ "$LABEL" == "#"* ]]; then
53                         continue
54                 fi
55
56                 if [ ! -f "$TEMP_DIR/$BINARY" ]; then
57                         echo "[ERROR] not found $BINARY, please check image file"
58                         exit
59                 fi
60
61                 BINARY_LIST="$BINARY_LIST $BINARY"
62         done < "$CONFIG_PATH"
63         echo "[INFO] Success to check all image file exists"
64         echo "[INFO] Binary list : $BINARY_LIST"
65
66         cp $CONFIG_PATH $TEMP_DIR
67         if [ -f $PRE_SCRIPT_PATH ]; then
68                 cp $PRE_SCRIPT_PATH $TEMP_DIR
69                 BINARY_LIST="$BINARY_LIST $PRE_SCRIPT_NAME"
70         fi
71
72         cd $TEMP_DIR
73         mksquashfs $BINARY_LIST $IMAGE_NAME
74         chmod 777 $IMAGE_NAME
75         mv $IMAGE_NAME $RESULT_DIR
76 }
77
78 function __sign__() {
79         SIGN_PKCS_FILE=$1
80         SIGN_PKCS_PASSWORD=$2
81         if [ "z$SIGN_PKCS_FILE" != "z" ]; then
82                 if [ "z$SIGN_PKCS_PASSWORD" != "z" ]; then
83                         SIGNER_OPTIONAL_ARGUMENT="-p $SIGN_PKCS_PASSWORD"
84                 fi
85                 cd $TOTA_UPG_DIR
86                 ./mk_delta/common/bin/sign_img.sh -k $SIGN_PKCS_FILE -i $RESULT_DIR/$IMAGE_NAME $SIGNER_OPTIONAL_ARGUMENT
87         fi
88 }
89
90 function __cleanup__() {
91         rm -rf $TEMP_DIR
92         if [ $? -ne 0 ]; then
93                 echo "[WARN] Failed to remove $TEMP_DIR"
94                 exit
95         fi
96 }
97
98 if [ $# -lt 2 ]; then
99         echo "Usage : generate_package.sh TOTA_UPG_PATH TARGET [SIGN_PKCS_FILE SIGN_PKCS_PASSWORD]"
100         echo " TARGET > rpi"
101         exit
102 fi
103
104 __setup__ $1 $2
105 __unpack__
106
107 __pack__
108 __sign__ $3 $4
109 __cleanup__