diff options
Diffstat (limited to 'classes')
-rw-r--r-- | classes/image_types_ostree.bbclass | 18 | ||||
-rw-r--r-- | classes/image_types_ota.bbclass | 14 |
2 files changed, 18 insertions, 14 deletions
diff --git a/classes/image_types_ostree.bbclass b/classes/image_types_ostree.bbclass index 0614dd3..ab11da9 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 [ ${@ oe.types.boolean('${OSTREE_UPDATE_SUMMARY}')} = True ]; then | 181 | if [ ${@ oe.types.boolean('${OSTREE_UPDATE_SUMMARY}')} = True ]; 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..a8a19b5 100644 --- a/classes/image_types_ota.bbclass +++ b/classes/image_types_ota.bbclass | |||
@@ -64,15 +64,25 @@ 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 | # Use OSTree hash to avoid any potential race conditions between | ||
70 | # multiple builds accessing the same ${OSTREE_REPO}. | ||
69 | ostree --repo=${OTA_SYSROOT}/ostree/repo pull-local --remote=${OSTREE_OSNAME} ${OSTREE_REPO} ${ostree_target_hash} | 71 | ostree --repo=${OTA_SYSROOT}/ostree/repo pull-local --remote=${OSTREE_OSNAME} ${OSTREE_REPO} ${ostree_target_hash} |
70 | kargs_list="" | 72 | kargs_list="" |
71 | for arg in ${OSTREE_KERNEL_ARGS}; do | 73 | for arg in ${OSTREE_KERNEL_ARGS}; do |
72 | kargs_list="${kargs_list} --karg-append=$arg" | 74 | kargs_list="${kargs_list} --karg-append=$arg" |
73 | done | 75 | done |
74 | 76 | ||
75 | ostree admin --sysroot=${OTA_SYSROOT} deploy ${kargs_list} --os=${OSTREE_OSNAME} ${ostree_target_hash} | 77 | # Create the same reference on the device we use in the archive OSTree |
78 | # repo in ${OSTREE_REPO}. This reference will show up when showing the | ||
79 | # deployment on the device: | ||
80 | # ostree admin status | ||
81 | # If a remote with the name ${OSTREE_OSNAME} is configured, this also | ||
82 | # will allow to use: | ||
83 | # ostree admin upgrade | ||
84 | ostree --repo=${OTA_SYSROOT}/ostree/repo refs --create=${OSTREE_OSNAME}:${OSTREE_BRANCHNAME} ${ostree_target_hash} | ||
85 | ostree admin --sysroot=${OTA_SYSROOT} deploy ${kargs_list} --os=${OSTREE_OSNAME} ${OSTREE_OSNAME}:${OSTREE_BRANCHNAME} | ||
76 | 86 | ||
77 | cp -a ${IMAGE_ROOTFS}/var/sota ${OTA_SYSROOT}/ostree/deploy/${OSTREE_OSNAME}/var/ || true | 87 | cp -a ${IMAGE_ROOTFS}/var/sota ${OTA_SYSROOT}/ostree/deploy/${OSTREE_OSNAME}/var/ || true |
78 | # Create /var/sota if it doesn't exist yet | 88 | # Create /var/sota if it doesn't exist yet |