summaryrefslogtreecommitdiffstats
path: root/meta-sota/classes/image_types_ostree.bbclass
blob: b82bfb70693f264febba5e09b20efbc43e38a54d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# OSTree deployment

inherit image_types

IMAGE_DEPENDS_ostree = "ostree-native:do_populate_sysroot \ 
			virtual/kernel:do_deploy \
			${INITRAMFS_IMAGE}:do_rootfs"

# Please redefine OSTREE_REPO in your local.conf in order to have a persistent
#   OSTree repo
OSTREE_REPO ?= "${DEPLOY_DIR_IMAGE}/ostree_repo"
export OSTREE_REPO

# OSTREE_BRANCHNAME can also be redefined
OSTREE_BRANCHNAME ?= "${IMAGE_BASENAME}"
export OSTREE_BRANCHNAME

IMAGE_CMD_ostree () {
	OSTREE_ROOTFS=`mktemp -d ${WORKDIR}/ostree-root-XXXXX`
	cp -rp ${IMAGE_ROOTFS}/* ${OSTREE_ROOTFS}
	cd ${OSTREE_ROOTFS}

	# Create sysroot directory to which physical sysroot will be mounted
	mkdir sysroot
	ln -sf /sysroot/ostree ostree
	ln -sf /sysroot/tmp tmp

	mkdir -p usr/rootdirs
	mkdir -p var/rootdirs

	# Implement UsrMove
	dirs="bin sbin lib"

	for dir in ${dirs} ; do
		if [ -d ${dir} ] && [ ! -L ${dir} ] ; then 
			mv ${dir} usr/rootdirs/
			rm -rf ${dir}
			ln -sf /usr/rootdirs/${dir} ${dir}
		fi
	done

	# Move persistent directories to /var
	dirs="home opt mnt media srv"

	for dir in ${dirs}; do
		if [ -d ${dir} ] && [ ! -L ${dir} ]; then
			mv ${dir} var/rootdirs/
			ln -sf /var/rootdirs/${dir} ${dir}
		fi
	done

	if [ -d root ] && [ ! -L root ]; then
		mv root var/roothome
		ln -sf /var/roothome root
	fi

	# Creating boot directories is required for "ostree admin deploy"

	mkdir -p boot/loader.0
	mkdir -p boot/loader.1
	ln -sf boot/loader.0 boot/loader

	checksum=`sha256sum ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} | cut -f 1 -d " "`

	cp ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} boot/vmlinuz-${checksum}
	cp ${DEPLOY_DIR_IMAGE}/${INITRD_IMAGE}-${MACHINE}.cpio.gz boot/initramfs-${checksum}

	cd ${WORKDIR}

	# Create a tarball that can be then commited to OSTree repo
	OSTREE_TAR=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ostree.tar.bz2 
	tar -C ${OSTREE_ROOTFS} -cjf ${OSTREE_TAR} .
	rm -rf ${OSTREE_ROOTFS}
	
	if [ ! -d ${OSTREE_REPO} ]; then
		ostree --repo=${OSTREE_REPO} init --mode=archive-z2
	fi

	# Commit the result
	ostree --repo=${OSTREE_REPO} commit \
	       --tree=tar=${OSTREE_TAR} \
	       --skip-if-unchanged \
	       --branch=${OSTREE_BRANCHNAME} \
	       --subject="Commit-id: ${IMAGE_NAME}"

}