summaryrefslogtreecommitdiffstats
path: root/classes/image_types_ostree.bbclass
diff options
context:
space:
mode:
authorAnton Gerasimov <anton@advancedtelematic.com>2016-09-26 15:44:53 +0200
committerAnton Gerasimov <anton@advancedtelematic.com>2016-09-26 15:44:53 +0200
commit844ddcf4496edfdb9b682f712ab1ae1cd16f1f97 (patch)
tree5cb9794fb8630c32797b9687cd847d7b954b55cd /classes/image_types_ostree.bbclass
parent0983092cf61779b70cb41741bd4913b0f0f0fbac (diff)
downloadmeta-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.bbclass80
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
3inherit image_types 3inherit image
4 4
5IMAGE_DEPENDS_ostree = "ostree-native:do_populate_sysroot \ 5IMAGE_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
11OSTREE_REPO ?= "${DEPLOY_DIR_IMAGE}/ostree_repo"
12export OSTREE_REPO 9export OSTREE_REPO
13
14# OSTREE_BRANCHNAME can also be redefined
15OSTREE_BRANCHNAME ?= "${IMAGE_BASENAME}"
16export OSTREE_BRANCHNAME 10export OSTREE_BRANCHNAME
17 11
18IMAGE_CMD_ostree () { 12IMAGE_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