diff options
| author | Anton Gerasimov <anton@advancedtelematic.com> | 2016-09-01 16:11:52 +0200 |
|---|---|---|
| committer | Anton Gerasimov <anton@advancedtelematic.com> | 2016-09-01 16:11:52 +0200 |
| commit | 38b09fb1d11a2d66decaff2c5180eb6fac0cbb6d (patch) | |
| tree | e76a79a349871195d3fd7ef6be4ab5527d06e2b1 /classes | |
| parent | 081b8be83fd8dd718ea8feb7e3cd6baea271032b (diff) | |
| download | meta-updater-38b09fb1d11a2d66decaff2c5180eb6fac0cbb6d.tar.gz | |
Adds image type for OSTree deployment sysroot
Bug-AGL: SPEC-246
Change-Id: I1390d1aae652f84b61a3b9ca33ae886c138edc50
Signed-off-by: Anton Gerasimov <anton@advancedtelematic.com>
Diffstat (limited to 'classes')
| -rw-r--r-- | classes/image_types_ostree.bbclass | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/classes/image_types_ostree.bbclass b/classes/image_types_ostree.bbclass new file mode 100644 index 0000000..b82bfb7 --- /dev/null +++ b/classes/image_types_ostree.bbclass | |||
| @@ -0,0 +1,87 @@ | |||
| 1 | # OSTree deployment | ||
| 2 | |||
| 3 | inherit image_types | ||
| 4 | |||
| 5 | IMAGE_DEPENDS_ostree = "ostree-native:do_populate_sysroot \ | ||
| 6 | virtual/kernel:do_deploy \ | ||
| 7 | ${INITRAMFS_IMAGE}:do_rootfs" | ||
| 8 | |||
| 9 | # Please redefine OSTREE_REPO in your local.conf in order to have a persistent | ||
| 10 | # OSTree repo | ||
| 11 | OSTREE_REPO ?= "${DEPLOY_DIR_IMAGE}/ostree_repo" | ||
| 12 | export OSTREE_REPO | ||
| 13 | |||
| 14 | # OSTREE_BRANCHNAME can also be redefined | ||
| 15 | OSTREE_BRANCHNAME ?= "${IMAGE_BASENAME}" | ||
| 16 | export OSTREE_BRANCHNAME | ||
| 17 | |||
| 18 | IMAGE_CMD_ostree () { | ||
| 19 | OSTREE_ROOTFS=`mktemp -d ${WORKDIR}/ostree-root-XXXXX` | ||
| 20 | cp -rp ${IMAGE_ROOTFS}/* ${OSTREE_ROOTFS} | ||
| 21 | cd ${OSTREE_ROOTFS} | ||
| 22 | |||
| 23 | # Create sysroot directory to which physical sysroot will be mounted | ||
| 24 | mkdir sysroot | ||
| 25 | ln -sf /sysroot/ostree ostree | ||
| 26 | ln -sf /sysroot/tmp tmp | ||
| 27 | |||
| 28 | mkdir -p usr/rootdirs | ||
| 29 | mkdir -p var/rootdirs | ||
| 30 | |||
| 31 | # Implement UsrMove | ||
| 32 | dirs="bin sbin lib" | ||
| 33 | |||
| 34 | for dir in ${dirs} ; do | ||
| 35 | if [ -d ${dir} ] && [ ! -L ${dir} ] ; then | ||
| 36 | mv ${dir} usr/rootdirs/ | ||
| 37 | rm -rf ${dir} | ||
| 38 | ln -sf /usr/rootdirs/${dir} ${dir} | ||
| 39 | fi | ||
| 40 | done | ||
| 41 | |||
| 42 | # Move persistent directories to /var | ||
| 43 | dirs="home opt mnt media srv" | ||
| 44 | |||
| 45 | for dir in ${dirs}; do | ||
| 46 | if [ -d ${dir} ] && [ ! -L ${dir} ]; then | ||
| 47 | mv ${dir} var/rootdirs/ | ||
| 48 | ln -sf /var/rootdirs/${dir} ${dir} | ||
| 49 | fi | ||
| 50 | done | ||
| 51 | |||
| 52 | if [ -d root ] && [ ! -L root ]; then | ||
| 53 | mv root var/roothome | ||
| 54 | ln -sf /var/roothome root | ||
| 55 | fi | ||
| 56 | |||
| 57 | # Creating boot directories is required for "ostree admin deploy" | ||
| 58 | |||
| 59 | mkdir -p boot/loader.0 | ||
| 60 | mkdir -p boot/loader.1 | ||
| 61 | ln -sf boot/loader.0 boot/loader | ||
| 62 | |||
| 63 | checksum=`sha256sum ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} | cut -f 1 -d " "` | ||
| 64 | |||
| 65 | cp ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} boot/vmlinuz-${checksum} | ||
| 66 | cp ${DEPLOY_DIR_IMAGE}/${INITRD_IMAGE}-${MACHINE}.cpio.gz boot/initramfs-${checksum} | ||
| 67 | |||
| 68 | cd ${WORKDIR} | ||
| 69 | |||
| 70 | # Create a tarball that can be then commited to OSTree repo | ||
| 71 | OSTREE_TAR=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ostree.tar.bz2 | ||
| 72 | tar -C ${OSTREE_ROOTFS} -cjf ${OSTREE_TAR} . | ||
| 73 | rm -rf ${OSTREE_ROOTFS} | ||
| 74 | |||
| 75 | if [ ! -d ${OSTREE_REPO} ]; then | ||
| 76 | ostree --repo=${OSTREE_REPO} init --mode=archive-z2 | ||
| 77 | fi | ||
| 78 | |||
| 79 | # Commit the result | ||
| 80 | ostree --repo=${OSTREE_REPO} commit \ | ||
| 81 | --tree=tar=${OSTREE_TAR} \ | ||
| 82 | --skip-if-unchanged \ | ||
| 83 | --branch=${OSTREE_BRANCHNAME} \ | ||
| 84 | --subject="Commit-id: ${IMAGE_NAME}" | ||
| 85 | |||
| 86 | } | ||
| 87 | |||
