summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Vacek <patrickvacek@gmail.com>2020-05-12 17:16:39 +0200
committerGitHub <noreply@github.com>2020-05-12 17:16:39 +0200
commit87111ac809aae86598ac7d013be9b572fbad8d7e (patch)
treecd3ab1dfeb4c5805231e1f2f9eab9fc4e6b30582
parentc47a487bdfd1b24eddd96263f85639d51915fc1f (diff)
parent48c0442f926940346e2d4fa693c49cb7419917bf (diff)
downloadmeta-updater-87111ac809aae86598ac7d013be9b572fbad8d7e.tar.gz
Merge pull request #716 from agners/master-ostree-fix-deployment-ref
Use checksum as deployment source and refspec in the deployment
-rw-r--r--classes/image_types_ostree.bbclass18
-rw-r--r--classes/image_types_ota.bbclass14
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
192IMAGE_TYPEDEP_ostreepush = "ostreecommit" 186IMAGE_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