summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Dudau <adrian.dudau@enea.com>2019-05-10 18:53:12 +0200
committerAdrian Dudau <adrian.dudau@enea.com>2019-05-13 10:53:07 +0200
commitbc97b28dd147def3bad048f9ee50900348940cd7 (patch)
treed1922c4d2a5f2a43c9321c9af17e60de6b18391d
parenta09771b493ca8d017965abcc0d03ef12a9443a9c (diff)
downloadmeta-el-nfv-access-bc97b28dd147def3bad048f9ee50900348940cd7.tar.gz
Override image_types_ostree class
Override the class to install the kernel and initramfs signature files into the ostree image. Change-Id: I3cd9d1b0dcb2519802443d9a959a3b35e8a9a823 Signed-off-by: Adrian Dudau <adrian.dudau@enea.com>
-rw-r--r--classes/override_image_types_ostree.inc150
-rw-r--r--images/enea-nfv-access-host-common.inc1
2 files changed, 151 insertions, 0 deletions
diff --git a/classes/override_image_types_ostree.inc b/classes/override_image_types_ostree.inc
new file mode 100644
index 0000000..62a2251
--- /dev/null
+++ b/classes/override_image_types_ostree.inc
@@ -0,0 +1,150 @@
1IMAGE_CMD_ostree () {
2 if [ -z "$OSTREE_REPO" ]; then
3 bbfatal "OSTREE_REPO should be set in your local.conf"
4 fi
5
6 if [ -z "$OSTREE_BRANCHNAME" ]; then
7 bbfatal "OSTREE_BRANCHNAME should be set in your local.conf"
8 fi
9
10 OSTREE_ROOTFS=`mktemp -du ${WORKDIR}/ostree-root-XXXXX`
11 cp -a ${IMAGE_ROOTFS} ${OSTREE_ROOTFS}
12 chmod a+rx ${OSTREE_ROOTFS}
13 sync
14
15 cd ${OSTREE_ROOTFS}
16
17 for d in var/*; do
18 if [ "${d}" != "var/local" ]; then
19 rm -rf ${d}
20 fi
21 done
22
23 # Create sysroot directory to which physical sysroot will be mounted
24 mkdir sysroot
25 ln -sf sysroot/ostree ostree
26
27 rm -rf tmp/*
28 ln -sf sysroot/tmp tmp
29
30 mkdir -p usr/rootdirs
31
32 mv etc usr/
33 # Implement UsrMove
34 dirs="bin sbin lib"
35
36 for dir in ${dirs} ; do
37 if [ -d ${dir} ] && [ ! -L ${dir} ] ; then
38 mv ${dir} usr/rootdirs/
39 rm -rf ${dir}
40 ln -sf usr/rootdirs/${dir} ${dir}
41 fi
42 done
43
44 if [ -n "$SYSTEMD_USED" ]; then
45 mkdir -p usr/etc/tmpfiles.d
46 tmpfiles_conf=usr/etc/tmpfiles.d/00ostree-tmpfiles.conf
47 echo "d /var/rootdirs 0755 root root -" >>${tmpfiles_conf}
48 echo "L /var/rootdirs/home - - - - /sysroot/home" >>${tmpfiles_conf}
49 else
50 mkdir -p usr/etc/init.d
51 tmpfiles_conf=usr/etc/init.d/tmpfiles.sh
52 echo '#!/bin/sh' > ${tmpfiles_conf}
53 echo "mkdir -p /var/rootdirs; chmod 755 /var/rootdirs" >> ${tmpfiles_conf}
54 echo "ln -sf /sysroot/home /var/rootdirs/home" >> ${tmpfiles_conf}
55
56 ln -s ../init.d/tmpfiles.sh usr/etc/rcS.d/S20tmpfiles.sh
57 fi
58
59 # Preserve OSTREE_BRANCHNAME for future information
60 mkdir -p usr/share/sota/
61 echo -n "${OSTREE_BRANCHNAME}" > usr/share/sota/branchname
62
63 # Preserve data in /home to be later copied to /sysroot/home by sysroot
64 # generating procedure
65 mkdir -p usr/homedirs
66 if [ -d "home" ] && [ ! -L "home" ]; then
67 mv home usr/homedirs/home
68 ln -sf var/rootdirs/home home
69 fi
70
71 # Move persistent directories to /var
72 dirs="opt mnt media srv"
73
74 for dir in ${dirs}; do
75 if [ -d ${dir} ] && [ ! -L ${dir} ]; then
76 if [ "$(ls -A $dir)" ]; then
77 bbwarn "Data in /$dir directory is not preserved by OSTree. Consider moving it under /usr"
78 fi
79
80 if [ -n "$SYSTEMD_USED" ]; then
81 echo "d /var/rootdirs/${dir} 0755 root root -" >>${tmpfiles_conf}
82 else
83 echo "mkdir -p /var/rootdirs/${dir}; chown 755 /var/rootdirs/${dir}" >>${tmpfiles_conf}
84 fi
85 rm -rf ${dir}
86 ln -sf var/rootdirs/${dir} ${dir}
87 fi
88 done
89
90 if [ -d root ] && [ ! -L root ]; then
91 if [ "$(ls -A root)" ]; then
92 bberror "Data in /root directory is not preserved by OSTree."
93 exit 1
94 fi
95
96 if [ -n "$SYSTEMD_USED" ]; then
97 echo "d /var/roothome 0755 root root -" >>${tmpfiles_conf}
98 else
99 echo "mkdir -p /var/roothome; chown 755 /var/roothome" >>${tmpfiles_conf}
100 fi
101
102 rm -rf root
103 ln -sf var/roothome root
104 fi
105
106 if [ -n "${SOTA_SECONDARY_ECUS}" ]; then
107 mkdir -p var/sota/ecus
108 cp ${SOTA_SECONDARY_ECUS} var/sota/ecus
109 fi
110
111 # Creating boot directories is required for "ostree admin deploy"
112
113 mkdir -p boot/loader.0
114 mkdir -p boot/loader.1
115 ln -sf boot/loader.0 boot/loader
116
117 checksum=`sha256sum ${DEPLOY_DIR_IMAGE}/${OSTREE_KERNEL} | cut -f 1 -d " "`
118
119 # Copy kernel and initramfs and their signature files
120 cp ${DEPLOY_DIR_IMAGE}/${OSTREE_KERNEL} boot/vmlinuz-${checksum}
121 cp ${DEPLOY_DIR_IMAGE}/${OSTREE_KERNEL}.p7b boot/vmlinuz-${checksum}.p7b
122 cp ${DEPLOY_DIR_IMAGE}/${OSTREE_INITRAMFS_IMAGE}-${MACHINE}${RAMDISK_EXT} boot/initramfs-${checksum}
123 cp ${DEPLOY_DIR_IMAGE}/${OSTREE_INITRAMFS_IMAGE}-${MACHINE}${RAMDISK_EXT}.p7b boot/initramfs-${checksum}.p7b
124
125 # Copy image manifest
126 cat ${IMAGE_MANIFEST} | cut -d " " -f1,3 > usr/package.manifest
127
128 cd ${WORKDIR}
129
130 # Create a tarball that can be then commited to OSTree repo
131 OSTREE_TAR=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ostree.tar.bz2
132 tar -C ${OSTREE_ROOTFS} --xattrs --xattrs-include='*' -cjf ${OSTREE_TAR} .
133 sync
134
135 rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.rootfs.ostree.tar.bz2
136 ln -s ${IMAGE_NAME}.rootfs.ostree.tar.bz2 ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.rootfs.ostree.tar.bz2
137
138 if [ ! -d ${OSTREE_REPO} ]; then
139 ostree --repo=${OSTREE_REPO} init --mode=archive-z2
140 fi
141
142 # Commit the result
143 ostree --repo=${OSTREE_REPO} commit \
144 --tree=dir=${OSTREE_ROOTFS} \
145 --skip-if-unchanged \
146 --branch=${OSTREE_BRANCHNAME} \
147 --subject="Commit-id: ${IMAGE_NAME}"
148
149 rm -rf ${OSTREE_ROOTFS}
150}
diff --git a/images/enea-nfv-access-host-common.inc b/images/enea-nfv-access-host-common.inc
index 352f734..53cf7ad 100644
--- a/images/enea-nfv-access-host-common.inc
+++ b/images/enea-nfv-access-host-common.inc
@@ -1,5 +1,6 @@
1require images/enea-nfv-access-common.inc 1require images/enea-nfv-access-common.inc
2require classes/override_grub-efi.inc 2require classes/override_grub-efi.inc
3require classes/override_image_types_ostree.inc
3require images/secure-boot.inc 4require images/secure-boot.inc
4 5
5IMAGE_INSTALL += " \ 6IMAGE_INSTALL += " \