39a382d395bee93549b9fbab5919ef4ee2142819
[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
20         CONFIG_PATH="$CONFIG_DIR/$CONFIG_NAME"
21
22         # Setup prerequiste
23         rm -rf $TEMP_DIR $RESULT_DIR
24         mkdir -p $TEMP_DIR $RESULT_DIR
25
26         echo "[INFO] Target directory : $TARGET_DIR"
27         echo "[INFO] Result directory : $RESULT_DIR"
28 }
29
30 function __unpack__() {
31         image_dirs=("$BOOT_DIR/*.tar.gz" "$PLATFORM_DIR/*.tar.gz")
32
33         for image_dir in ${image_dirs[@]}; do
34                 for image in $image_dir; do
35                         tar -zvxf $image --directory=$TEMP_DIR
36                         if [ $? -ne 0 ]; then
37                                 echo "[ERROR] Failed to extract $image, please check image file"
38                                 exit
39                         fi
40                         echo "[INFO] Success to extract : $image"
41                 done
42         done
43 }
44
45 function __pack__() {
46         BINARY_LIST="$CONFIG_NAME"
47         while read LABEL BINARY DEV || [ -n "$LABEL" ]
48         do
49                 # Ignore empty or comment line
50                 if [ -z "$LABEL" ] || [[ "$LABEL" == "#"* ]]; then
51                         continue
52                 fi
53
54                 if [ ! -f "$TEMP_DIR/$BINARY" ]; then
55                         echo "[ERROR] not found $BINARY, please check image file"
56                         exit
57                 fi
58
59                 BINARY_LIST="$BINARY_LIST $BINARY"
60         done < "$CONFIG_PATH"
61         echo "[INFO] Success to check all image file exists"
62         echo "[INFO] Binary list : $BINARY_LIST"
63
64         cp $CONFIG_PATH $TEMP_DIR
65         cd $TEMP_DIR
66         mksquashfs $BINARY_LIST $IMAGE_NAME
67         chmod 777 $IMAGE_NAME
68         mv $IMAGE_NAME $RESULT_DIR
69 }
70
71 function __sign__() {
72         SIGN_PKCS_FILE=$1
73         SIGN_PKCS_PASSWORD=$2
74         if [ "z$SIGN_PKCS_FILE" != "z" ]; then
75                 if [ "z$SIGN_PKCS_PASSWORD" != "z" ]; then
76                         SIGNER_OPTIONAL_ARGUMENT="-p $SIGN_PKCS_PASSWORD"
77                 fi
78                 cd $TOTA_UPG_DIR
79                 ./mk_delta/common/bin/sign_img.sh -k $SIGN_PKCS_FILE -i $RESULT_DIR/$IMAGE_NAME $SIGNER_OPTIONAL_ARGUMENT
80         fi
81 }
82
83 function __cleanup__() {
84         rm -rf $TEMP_DIR
85         if [ $? -ne 0 ]; then
86                 echo "[WARN] Failed to remove $TEMP_DIR"
87                 exit
88         fi
89 }
90
91 if [ $# -lt 2 ]; then
92         echo "Usage : generate_package.sh TOTA_UPG_PATH TARGET [SIGN_PKCS_FILE SIGN_PKCS_PASSWORD]"
93         echo " TARGET > rpi"
94         exit
95 fi
96
97 __setup__ $1 $2
98 __unpack__
99
100 __pack__
101 __sign__ $3 $4
102 __cleanup__