summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYifan Hong <elsk@google.com>2020-09-01 22:41:36 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2020-09-01 22:41:36 +0000
commit14dd17bd8971ac89597882c287abc39927dab0f8 (patch)
treeed094878d1bd941bc64d8d4ef9aa4f92ee3bc5b8
parentd62949cffb5cddf7465811ec610e586285099ff9 (diff)
parent5b8ce8713bf378c6eae4cf60f24e7211897a0a7f (diff)
downloadextras-14dd17bd8971ac89597882c287abc39927dab0f8.tar.gz
Merge "Generic rules to build GKI APEXes"
-rw-r--r--gki/Android.bp31
-rw-r--r--gki/com.android.gki.avbpubkeybin0 -> 1032 bytes
-rw-r--r--gki/com.android.gki.pem51
-rw-r--r--gki/postinstall.sh3
-rw-r--r--gki/preinstall.sh39
5 files changed, 124 insertions, 0 deletions
diff --git a/gki/Android.bp b/gki/Android.bp
index 1d907cdd..46fcb0aa 100644
--- a/gki/Android.bp
+++ b/gki/Android.bp
@@ -35,3 +35,34 @@ python_binary_host {
},
},
}
+
+apex_key {
+ name: "com.android.gki.key",
+ public_key: "com.android.gki.avbpubkey",
+ private_key: "com.android.gki.pem",
+}
+
+sh_binary {
+ name: "com.android.gki.preinstall",
+ src: "preinstall.sh",
+}
+
+sh_binary {
+ name: "com.android.gki.postinstall",
+ src: "postinstall.sh",
+}
+
+// Common defaults for all GKI APEXes.
+apex_defaults {
+ name: "com.android.gki_defaults",
+ binaries: [
+ "update_engine_stable_client",
+ "com.android.gki.preinstall",
+ "com.android.gki.postinstall",
+ ],
+ file_contexts: ":com.android.gki-file_contexts",
+ // Key to sign apex_payload.img
+ key: "com.android.gki.key",
+ // Key to sign APEX. Left empty to use defaults.
+ certificate: "",
+}
diff --git a/gki/com.android.gki.avbpubkey b/gki/com.android.gki.avbpubkey
new file mode 100644
index 00000000..166d37ee
--- /dev/null
+++ b/gki/com.android.gki.avbpubkey
Binary files differ
diff --git a/gki/com.android.gki.pem b/gki/com.android.gki.pem
new file mode 100644
index 00000000..fd856789
--- /dev/null
+++ b/gki/com.android.gki.pem
@@ -0,0 +1,51 @@
+-----BEGIN RSA PRIVATE KEY-----
+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
+-----END RSA PRIVATE KEY-----
diff --git a/gki/postinstall.sh b/gki/postinstall.sh
new file mode 100644
index 00000000..d29e65b1
--- /dev/null
+++ b/gki/postinstall.sh
@@ -0,0 +1,3 @@
+#!/system/bin/sh
+
+log -p i -t gki "GKI APEX postinstall hook starting."
diff --git a/gki/preinstall.sh b/gki/preinstall.sh
new file mode 100644
index 00000000..fbd16e1d
--- /dev/null
+++ b/gki/preinstall.sh
@@ -0,0 +1,39 @@
+#!/system/bin/sh
+
+# sleep_exit [<exit_code>]
+function sleep_exit() {
+ # Sleep before exit to ensure logs flushes.
+ sleep 5s
+ exit $@
+}
+
+# log_gki <priority> <message>
+function log_gki() {
+ log -t gki -p $@
+}
+
+log_gki i "GKI APEX preinstall hook starting."
+
+mydir=$(dirname $(dirname $(realpath "$0")))
+if [[ $(dirname $mydir) != "/apex" ]] || [[ $(basename $mydir) != com.android.gki.* ]]; then
+ log_gki e "This script must be installed under /apex/com.android.gki.*"
+ sleep_exit 1
+fi
+
+# The pre-installed APEX does not contain any OTA payload. Just skip installing anything.
+if [[ ! -f ${mydir}/etc/ota/payload.bin ]]; then
+ log_gki e "No payload.bin found."
+ sleep_exit 1
+fi
+
+log_gki i "Applying payload.";
+
+if ! ${mydir}/bin/update_engine_stable_client \
+ --payload ${mydir}/etc/ota/payload.bin \
+ --headers "$(cat ${mydir}/etc/ota/payload_properties.txt)"; then
+ log_gki e "OTA failed"
+ sleep_exit 1
+fi
+
+log_gki i "OTA successful"
+sleep_exit 0