diff options
author | Anton Gerasimov <anton@advancedtelematic.com> | 2016-09-26 15:44:53 +0200 |
---|---|---|
committer | Anton Gerasimov <anton@advancedtelematic.com> | 2016-09-26 15:44:53 +0200 |
commit | 844ddcf4496edfdb9b682f712ab1ae1cd16f1f97 (patch) | |
tree | 5cb9794fb8630c32797b9687cd847d7b954b55cd /classes/image_types_ostree.bbclass | |
parent | 0983092cf61779b70cb41741bd4913b0f0f0fbac (diff) | |
download | meta-updater-844ddcf4496edfdb9b682f712ab1ae1cd16f1f97.tar.gz |
Added initramfs image and fixed several error to make AGL rootfs
bootable as an OSTree deployment
Bug-AGL: SPEC-253
Change-Id: If636a282d51a64c73c46ce70a361518c1f70cdd6
Signed-off-by: Anton Gerasimov <anton@advancedtelematic.com>
Diffstat (limited to 'classes/image_types_ostree.bbclass')
-rw-r--r-- | classes/image_types_ostree.bbclass | 80 |
1 files changed, 57 insertions, 23 deletions
diff --git a/classes/image_types_ostree.bbclass b/classes/image_types_ostree.bbclass index 5b9ac97..a180721 100644 --- a/classes/image_types_ostree.bbclass +++ b/classes/image_types_ostree.bbclass | |||
@@ -1,33 +1,40 @@ | |||
1 | # OSTree deployment | 1 | # OSTree deployment |
2 | 2 | ||
3 | inherit image_types | 3 | inherit image |
4 | 4 | ||
5 | IMAGE_DEPENDS_ostree = "ostree-native:do_populate_sysroot \ | 5 | IMAGE_DEPENDS_ostree = "ostree-native:do_populate_sysroot \ |
6 | virtual/kernel:do_deploy \ | 6 | virtual/kernel:do_deploy \ |
7 | ${INITRAMFS_IMAGE}:do_image_cpio" | 7 | ${OSTREE_INITRAMFS_IMAGE}:do_image_cpio" |
8 | 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 | 9 | export OSTREE_REPO |
13 | |||
14 | # OSTREE_BRANCHNAME can also be redefined | ||
15 | OSTREE_BRANCHNAME ?= "${IMAGE_BASENAME}" | ||
16 | export OSTREE_BRANCHNAME | 10 | export OSTREE_BRANCHNAME |
17 | 11 | ||
18 | IMAGE_CMD_ostree () { | 12 | IMAGE_CMD_ostree () { |
19 | OSTREE_ROOTFS=`mktemp -d ${WORKDIR}/ostree-root-XXXXX` | 13 | if [ -z "$OSTREE_REPO" ]; then |
20 | cp -rp ${IMAGE_ROOTFS}/* ${OSTREE_ROOTFS} | 14 | bbfatal "OSTREE_REPO should be set in your local.conf" |
15 | fi | ||
16 | |||
17 | if [ -z "$OSTREE_BRANCHNAME" ]; then | ||
18 | bbfatal "OSTREE_BRANCHNAME should be set in your local.conf" | ||
19 | fi | ||
20 | |||
21 | OSTREE_ROOTFS=`mktemp -du ${WORKDIR}/ostree-root-XXXXX` | ||
22 | cp -a ${IMAGE_ROOTFS} ${OSTREE_ROOTFS} | ||
23 | chmod a+rx ${OSTREE_ROOTFS} | ||
24 | sync | ||
25 | |||
21 | cd ${OSTREE_ROOTFS} | 26 | cd ${OSTREE_ROOTFS} |
22 | 27 | ||
23 | # Create sysroot directory to which physical sysroot will be mounted | 28 | # Create sysroot directory to which physical sysroot will be mounted |
24 | mkdir sysroot | 29 | mkdir sysroot |
25 | ln -sf /sysroot/ostree ostree | 30 | ln -sf sysroot/ostree ostree |
26 | ln -sf /sysroot/tmp tmp | 31 | |
32 | rm -rf tmp/* | ||
33 | ln -sf sysroot/tmp tmp | ||
27 | 34 | ||
28 | mkdir -p usr/rootdirs | 35 | mkdir -p usr/rootdirs |
29 | mkdir -p var/rootdirs | ||
30 | 36 | ||
37 | mv etc usr/ | ||
31 | # Implement UsrMove | 38 | # Implement UsrMove |
32 | dirs="bin sbin lib" | 39 | dirs="bin sbin lib" |
33 | 40 | ||
@@ -35,23 +42,46 @@ IMAGE_CMD_ostree () { | |||
35 | if [ -d ${dir} ] && [ ! -L ${dir} ] ; then | 42 | if [ -d ${dir} ] && [ ! -L ${dir} ] ; then |
36 | mv ${dir} usr/rootdirs/ | 43 | mv ${dir} usr/rootdirs/ |
37 | rm -rf ${dir} | 44 | rm -rf ${dir} |
38 | ln -sf /usr/rootdirs/${dir} ${dir} | 45 | ln -sf usr/rootdirs/${dir} ${dir} |
39 | fi | 46 | fi |
40 | done | 47 | done |
48 | |||
49 | if [ ! -d "usr/etc/tmpfiles.d" ]; then | ||
50 | mkdir usr/etc/tmpfiles.d | ||
51 | fi | ||
52 | tmpfiles_conf=usr/etc/tmpfiles.d/00ostree-tmpfiles.conf | ||
53 | |||
54 | echo "d /var/rootdirs 0755 root root -" >>${tmpfiles_conf} | ||
55 | echo "L /var/rootdirs/home - - - - /sysroot/home" >>${tmpfiles_conf} | ||
56 | # Preserve data in /home to be later copied to /sysroot/home by | ||
57 | # sysroot generating procedure | ||
58 | mkdir -p usr/homedirs | ||
59 | if [ -d "home" ] && [ ! -L "home" ]; then | ||
60 | mv home usr/homedirs/home | ||
61 | ln -sf var/rootdirs/home home | ||
62 | fi | ||
41 | 63 | ||
42 | # Move persistent directories to /var | 64 | # Move persistent directories to /var |
43 | dirs="home opt mnt media srv" | 65 | dirs="opt mnt media srv" |
44 | 66 | ||
45 | for dir in ${dirs}; do | 67 | for dir in ${dirs}; do |
46 | if [ -d ${dir} ] && [ ! -L ${dir} ]; then | 68 | if [ -d ${dir} ] && [ ! -L ${dir} ]; then |
47 | mv ${dir} var/rootdirs/ | 69 | if [ "$(ls -A $dir)" ]; then |
48 | ln -sf /var/rootdirs/${dir} ${dir} | 70 | bbwarn "Data in /$dir directory is not preserved by OSTree. Consider moving it under /usr" |
71 | fi | ||
72 | echo "d /var/rootdirs/${dir} 0755 root root -" >>${tmpfiles_conf} | ||
73 | rm -rf ${dir} | ||
74 | ln -sf var/rootdirs/${dir} ${dir} | ||
49 | fi | 75 | fi |
50 | done | 76 | done |
51 | 77 | ||
52 | if [ -d root ] && [ ! -L root ]; then | 78 | if [ -d root ] && [ ! -L root ]; then |
53 | mv root var/roothome | 79 | if [ "$(ls -A root)" ]; then |
54 | ln -sf /var/roothome root | 80 | bberror "Data in /root directory is not preserved by OSTree." |
81 | fi | ||
82 | echo "d /var/roothome 0755 root root -" >>${tmpfiles_conf} | ||
83 | rm -rf root | ||
84 | ln -sf var/roothome root | ||
55 | fi | 85 | fi |
56 | 86 | ||
57 | # Creating boot directories is required for "ostree admin deploy" | 87 | # Creating boot directories is required for "ostree admin deploy" |
@@ -63,14 +93,17 @@ IMAGE_CMD_ostree () { | |||
63 | checksum=`sha256sum ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} | cut -f 1 -d " "` | 93 | checksum=`sha256sum ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} | cut -f 1 -d " "` |
64 | 94 | ||
65 | cp ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} boot/vmlinuz-${checksum} | 95 | cp ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} boot/vmlinuz-${checksum} |
66 | cp ${DEPLOY_DIR_IMAGE}/${INITRD_IMAGE}-${MACHINE}.cpio.gz boot/initramfs-${checksum} | 96 | cp ${DEPLOY_DIR_IMAGE}/${OSTREE_INITRAMFS_IMAGE}-${MACHINE}.cpio.gz boot/initramfs-${checksum} |
67 | 97 | ||
68 | cd ${WORKDIR} | 98 | cd ${WORKDIR} |
69 | 99 | ||
70 | # Create a tarball that can be then commited to OSTree repo | 100 | # Create a tarball that can be then commited to OSTree repo |
71 | OSTREE_TAR=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ostree.tar.bz2 | 101 | OSTREE_TAR=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ostree.tar.bz2 |
72 | tar -C ${OSTREE_ROOTFS} -cjf ${OSTREE_TAR} . | 102 | tar -C ${OSTREE_ROOTFS} --xattrs --xattrs-include='*' -cjf ${OSTREE_TAR} . |
73 | rm -rf ${OSTREE_ROOTFS} | 103 | sync |
104 | |||
105 | rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.rootfs.ostree.tar.bz2 | ||
106 | ln -s ${IMAGE_NAME}.rootfs.ostree.tar.bz2 ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.rootfs.ostree.tar.bz2 | ||
74 | 107 | ||
75 | if [ ! -d ${OSTREE_REPO} ]; then | 108 | if [ ! -d ${OSTREE_REPO} ]; then |
76 | ostree --repo=${OSTREE_REPO} init --mode=archive-z2 | 109 | ostree --repo=${OSTREE_REPO} init --mode=archive-z2 |
@@ -78,10 +111,11 @@ IMAGE_CMD_ostree () { | |||
78 | 111 | ||
79 | # Commit the result | 112 | # Commit the result |
80 | ostree --repo=${OSTREE_REPO} commit \ | 113 | ostree --repo=${OSTREE_REPO} commit \ |
81 | --tree=tar=${OSTREE_TAR} \ | 114 | --tree=dir=${OSTREE_ROOTFS} \ |
82 | --skip-if-unchanged \ | 115 | --skip-if-unchanged \ |
83 | --branch=${OSTREE_BRANCHNAME} \ | 116 | --branch=${OSTREE_BRANCHNAME} \ |
84 | --subject="Commit-id: ${IMAGE_NAME}" | 117 | --subject="Commit-id: ${IMAGE_NAME}" |
85 | 118 | ||
119 | rm -rf ${OSTREE_ROOTFS} | ||
86 | } | 120 | } |
87 | 121 | ||