#define APP_SHARED_DIR "/opt/usr/home/owner/apps_rw"
#define APP_SHARED_DATA "shared/data"
-#define FOTA_DIR "/opt/usr/data/fota"
#define FOTA_TRIGGER_FILE "upgrade-trigger.sh"
#define FOTA_TRIGGER_PATH FOTA_DIR "/" FOTA_TRIGGER_FILE
-#define FOTA_CHECKSUM_FILE "checksum.SHA1"
-#define FOTA_CHECKSUM_PATH FOTA_DIR "/" FOTA_CHECKSUM_FILE
#define FOTA_INSTALL_REBOOT_REASON "fota"
char *appid = NULL;
gchar *client_delta_path = NULL;
pid_t pid;
+ bool check_sha = false;
/* 1. Check client have delta.tar */
appid = get_sender_appid(sender_pid);
}
_FLOGI("Delta found: %s", client_delta_path);
- /* 3. Check client have appropriate delta */
- ret = util_file_untar(client_delta_path, FOTA_DELTA_UPDATE_INFO_DIR, FOTA_DELTA_UPDATE_INFO_FILENAME);
+ /* 3. Prepare fota dir */
+ ret = util_file_mkdir(FOTA_DIR);
if (ret < 0) {
status = -1;
goto execute_destroy;
}
- snprintf(buf, MAX_BUFFER_SIZE, "%s %s %s", DELTA_VERIFIER_BIN, DELTA_VERIFIER_BIN_LONG_ARG, FOTA_DELTA_UPDATE_INFO_PATH);
+
+ /* 4. Check client have appropriate delta */
+ ret = util_file_untar(client_delta_path, FOTA_DIR, FOTA_DELTA_UPDATE_INFO_FILENAME);
+ if (ret < 0) {
+ status = -1;
+ goto execute_destroy;
+ }
+ ret = util_file_untar(client_delta_path, FOTA_DIR, DELTA_VERIFIER_BIN);
+ if (ret < 0) {
+ status = -1;
+ goto execute_destroy;
+ }
+
+ ret = util_file_untar(client_delta_path, FOTA_DIR, FOTA_CHECKSUM_FILE);
+ if (ret < 0) {
+ _FLOGW("There is no %s in delta", FOTA_CHECKSUM_FILE);
+ } else {
+ check_sha = true;
+ }
+
+ if (check_sha) {
+ if (verify_checksum(FOTA_CHECKSUM_PATH, DELTA_VERIFIER_PATH) == 0) {
+ _FLOGI("Checksum of %s is correct", DELTA_VERIFIER_PATH);
+ } else {
+ status = -1;
+ _FLOGE("Failed checksum verification of %s", DELTA_VERIFIER_PATH);
+ goto execute_destroy;
+ }
+ }
+
+ snprintf(buf, MAX_BUFFER_SIZE, "%s %s %s", DELTA_VERIFIER_BIN_PATH, DELTA_VERIFIER_BIN_LONG_ARG, FOTA_DELTA_UPDATE_INFO_PATH);
ret = system(buf);
if (ret < 0) {
_FLOGE("Delta verification failed due to an error [return code: %d].", ret);
goto execute_destroy;
}
- /* 4. Setup local update flag */
+ /* 5. Setup local update flag */
ret = util_file_mkdir(FOTA_STATUS_DIR);
if (ret < 0) {
status = -1;
goto execute_destroy;
}
- /* 5. Trigger update */
- ret = util_file_mkdir(FOTA_DIR);
- if (ret < 0) {
- status = -1;
- goto execute_destroy;
- }
-
+ /* 6. Trigger update */
ret = util_file_untar(client_delta_path, FOTA_DIR, FOTA_TRIGGER_FILE);
if (ret < 0) {
status = -1;
goto execute_destroy;
}
- ret = util_file_untar(client_delta_path, FOTA_DIR, FOTA_CHECKSUM_FILE);
- if (ret < 0) {
- _FLOGW("There is no %s in delta", FOTA_CHECKSUM_FILE);
- } else {
+ if (check_sha) {
// If the checksum file exists, the sum must match
if (verify_checksum(FOTA_CHECKSUM_PATH, FOTA_TRIGGER_PATH) == 0) {
_FLOGI("Checksum of %s is correct", FOTA_TRIGGER_PATH);
#define FOTA_DELTA_FILENAME "delta.tar"
#define FOTA_DELTA_COMPRESSED_FILENAME "delta.tar.gz"
+#define FOTA_DIR "/opt/usr/data/fota"
#define FOTA_STATUS_DIR "/opt/data/update"
#define FOTA_STATUS_FLAG_PATH FOTA_STATUS_DIR "/is-first-boot-after-fota"
-#define FOTA_DELTA_UPDATE_INFO_DIR "/tmp"
#define FOTA_DELTA_UPDATE_INFO_FILENAME "update-info.ini"
-#define FOTA_DELTA_UPDATE_INFO_PATH FOTA_DELTA_UPDATE_INFO_DIR "/" FOTA_DELTA_UPDATE_INFO_FILENAME
-#define DELTA_VERIFIER_BIN "/usr/bin/delta-verifier"
+#define FOTA_DELTA_UPDATE_INFO_PATH FOTA_DIR "/" FOTA_DELTA_UPDATE_INFO_FILENAME
+#define DELTA_VERIFIER_BIN "delta-verifier"
+#define DELTA_VERIFIER_BIN_PATH FOTA_DIR "/" DELTA_VERIFIER_BIN
#define DELTA_VERIFIER_BIN_LONG_ARG "--update_info_path"
+#define FOTA_CHECKSUM_FILE "checksum.SHA1"
+#define FOTA_CHECKSUM_PATH FOTA_DIR "/" FOTA_CHECKSUM_FILE
+#define DELTA_VERIFIER_PATH FOTA_DIR "/" DELTA_VERIFIER_BIN
#define FOTA_EVENT_SIZE 3
}
}
+ /* 2. Prepare fota dir */
+ ret = util_file_mkdir(FOTA_DIR);
+ if (ret < 0) {
+ goto verify_destroy;
+ }
+
/* 2. Check storage have appropriate delta */
- ret = util_file_untar(storage_delta_path, FOTA_DELTA_UPDATE_INFO_DIR, FOTA_DELTA_UPDATE_INFO_FILENAME);
+ ret = util_file_untar(storage_delta_path, FOTA_DIR, FOTA_DELTA_UPDATE_INFO_FILENAME);
if (ret < 0) {
goto verify_destroy;
}
- snprintf(buf, MAX_BUFFER_SIZE, "%s %s %s", DELTA_VERIFIER_BIN, DELTA_VERIFIER_BIN_LONG_ARG, FOTA_DELTA_UPDATE_INFO_PATH);
+ ret = util_file_untar(storage_delta_path, FOTA_DIR, FOTA_CHECKSUM_FILE);
+ if (ret < 0) {
+ _FLOGW("There is no %s in delta", FOTA_CHECKSUM_FILE);
+ } else {
+ if (verify_checksum(FOTA_CHECKSUM_PATH, DELTA_VERIFIER_PATH) == 0) {
+ _FLOGI("Checksum of %s is correct", DELTA_VERIFIER_PATH);
+ } else {
+ ret = -1;
+ _FLOGE("Failed checksum verification of %s", DELTA_VERIFIER_PATH);
+ goto verify_destroy;
+ }
+ }
+
+ snprintf(buf, MAX_BUFFER_SIZE, "%s %s %s", DELTA_VERIFIER_BIN_PATH, DELTA_VERIFIER_BIN_LONG_ARG, FOTA_DELTA_UPDATE_INFO_PATH);
ret = system(buf);
if (ret < 0) {