diff options
author | Stefan Agner <stefan.agner@toradex.com> | 2020-04-28 16:28:14 +0000 |
---|---|---|
committer | Stefan Agner <stefan.agner@toradex.com> | 2020-05-07 21:06:55 +0000 |
commit | fcc397f16efde0c053c8a96e7500147ab84cb8d3 (patch) | |
tree | 59fbdb32eb6c13ce0adcfe72aad89fcf0aa5e703 /classes | |
parent | 82d7e04924f847bccba3136d1602d5646486a926 (diff) | |
download | meta-updater-fcc397f16efde0c053c8a96e7500147ab84cb8d3.tar.gz |
image_types_ostree/ota: use hash from ostree commit
Relying on a OSTree branch reference has been problematic in the past
and addressed by adding more attributes to it in commit 202a8c70ba8c
("image_types_ostree: Add a unique ref to fix simultaneous bitbaking.").
However, depening on what kind of OpenEmbedded builds are running in
parallel, even more attributes would need to be taken into account.
Instead of relying on a reference, store the exact ostree commit hash
in a manifest file and reuse it in the do_image_ota deploy task. This
guarantees that the correct reference gets picked even when two builds
with the exact same machine/image name run in parallel.
Note: This gets rid of the second branch name again. If the branch name
with image name is preferred, the variable OSTREE_BRANCHNAME can be
used:
OSTREE_BRANCHNAME = "${SOTA_HARDWARE_ID}-${IMAGE_BASENAME}"
Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
Diffstat (limited to 'classes')
-rw-r--r-- | classes/image_types_ostree.bbclass | 18 | ||||
-rw-r--r-- | classes/image_types_ota.bbclass | 2 |
2 files changed, 7 insertions, 13 deletions
diff --git a/classes/image_types_ostree.bbclass b/classes/image_types_ostree.bbclass index a8a6c39..dad625d 100644 --- a/classes/image_types_ostree.bbclass +++ b/classes/image_types_ostree.bbclass | |||
@@ -168,25 +168,19 @@ IMAGE_CMD_ostreecommit () { | |||
168 | fi | 168 | fi |
169 | 169 | ||
170 | # Commit the result | 170 | # Commit the result |
171 | ostree --repo=${OSTREE_REPO} commit \ | 171 | ostree_target_hash=$(ostree --repo=${OSTREE_REPO} commit \ |
172 | --tree=dir=${OSTREE_ROOTFS} \ | 172 | --tree=dir=${OSTREE_ROOTFS} \ |
173 | --skip-if-unchanged \ | 173 | --skip-if-unchanged \ |
174 | --branch=${OSTREE_BRANCHNAME} \ | 174 | --branch=${OSTREE_BRANCHNAME} \ |
175 | --subject="${OSTREE_COMMIT_SUBJECT}" \ | 175 | --subject="${OSTREE_COMMIT_SUBJECT}" \ |
176 | --body="${OSTREE_COMMIT_BODY}" \ | 176 | --body="${OSTREE_COMMIT_BODY}" \ |
177 | --add-metadata-string=version="${OSTREE_COMMIT_VERSION}" \ | 177 | --add-metadata-string=version="${OSTREE_COMMIT_VERSION}") |
178 | --bind-ref="${OSTREE_BRANCHNAME}-${IMAGE_BASENAME}" | 178 | |
179 | echo $ostree_target_hash > ${WORKDIR}/ostree_manifest | ||
179 | 180 | ||
180 | if [ "${OSTREE_UPDATE_SUMMARY}" = "1" ]; then | 181 | if [ "${OSTREE_UPDATE_SUMMARY}" = "1" ]; then |
181 | ostree --repo=${OSTREE_REPO} summary -u | 182 | ostree --repo=${OSTREE_REPO} summary -u |
182 | fi | 183 | fi |
183 | |||
184 | # To enable simultaneous bitbaking of two images with the same branch name, | ||
185 | # create a new ref in the repo using the basename of the image. (This first | ||
186 | # requires deleting it if it already exists.) Fixes OTA-2211. | ||
187 | ostree --repo=${OSTREE_REPO} refs --delete ${OSTREE_BRANCHNAME}-${IMAGE_BASENAME} | ||
188 | ostree_target_hash=$(cat ${OSTREE_REPO}/refs/heads/${OSTREE_BRANCHNAME}) | ||
189 | ostree --repo=${OSTREE_REPO} refs --create=${OSTREE_BRANCHNAME}-${IMAGE_BASENAME} ${ostree_target_hash} | ||
190 | } | 184 | } |
191 | 185 | ||
192 | IMAGE_TYPEDEP_ostreepush = "ostreecommit" | 186 | IMAGE_TYPEDEP_ostreepush = "ostreecommit" |
@@ -236,7 +230,7 @@ IMAGE_CMD_garagesign () { | |||
236 | --home-dir ${GARAGE_SIGN_REPO} \ | 230 | --home-dir ${GARAGE_SIGN_REPO} \ |
237 | --credentials ${SOTA_PACKED_CREDENTIALS} | 231 | --credentials ${SOTA_PACKED_CREDENTIALS} |
238 | 232 | ||
239 | ostree_target_hash=$(cat ${OSTREE_REPO}/refs/heads/${OSTREE_BRANCHNAME}-${IMAGE_BASENAME}) | 233 | ostree_target_hash=$(cat ${WORKDIR}/ostree_manifest) |
240 | 234 | ||
241 | # Use OSTree target hash as version if none was provided by the user | 235 | # Use OSTree target hash as version if none was provided by the user |
242 | target_version=${ostree_target_hash} | 236 | target_version=${ostree_target_hash} |
@@ -312,7 +306,7 @@ IMAGE_CMD_garagecheck () { | |||
312 | # if credentials are issued by a server that doesn't support offline signing, exit silently | 306 | # if credentials are issued by a server that doesn't support offline signing, exit silently |
313 | unzip -p ${SOTA_PACKED_CREDENTIALS} root.json targets.pub targets.sec tufrepo.url 2>&1 >/dev/null || exit 0 | 307 | unzip -p ${SOTA_PACKED_CREDENTIALS} root.json targets.pub targets.sec tufrepo.url 2>&1 >/dev/null || exit 0 |
314 | 308 | ||
315 | ostree_target_hash=$(cat ${OSTREE_REPO}/refs/heads/${OSTREE_BRANCHNAME}-${IMAGE_BASENAME}) | 309 | ostree_target_hash=$(cat ${WORKDIR}/ostree_manifest) |
316 | 310 | ||
317 | garage-check --ref=${ostree_target_hash} \ | 311 | garage-check --ref=${ostree_target_hash} \ |
318 | --credentials=${SOTA_PACKED_CREDENTIALS} \ | 312 | --credentials=${SOTA_PACKED_CREDENTIALS} \ |
diff --git a/classes/image_types_ota.bbclass b/classes/image_types_ota.bbclass index 374ddc2..56c7794 100644 --- a/classes/image_types_ota.bbclass +++ b/classes/image_types_ota.bbclass | |||
@@ -64,7 +64,7 @@ IMAGE_CMD_ota () { | |||
64 | bbfatal "Invalid bootloader: ${OSTREE_BOOTLOADER}" | 64 | bbfatal "Invalid bootloader: ${OSTREE_BOOTLOADER}" |
65 | fi | 65 | fi |
66 | 66 | ||
67 | ostree_target_hash=$(cat ${OSTREE_REPO}/refs/heads/${OSTREE_BRANCHNAME}-${IMAGE_BASENAME}) | 67 | ostree_target_hash=$(cat ${WORKDIR}/ostree_manifest) |
68 | 68 | ||
69 | ostree --repo=${OTA_SYSROOT}/ostree/repo pull-local --remote=${OSTREE_OSNAME} ${OSTREE_REPO} ${ostree_target_hash} | 69 | ostree --repo=${OTA_SYSROOT}/ostree/repo pull-local --remote=${OSTREE_OSNAME} ${OSTREE_REPO} ${ostree_target_hash} |
70 | kargs_list="" | 70 | kargs_list="" |