blob: fcba6d9d9aa7807280a1978f8a178f96597abca9 (
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# OSTree deployment
inherit image
IMAGE_DEPENDS_ostree = "ostree-native:do_populate_sysroot \
virtual/kernel:do_deploy \
${OSTREE_INITRAMFS_IMAGE}:do_image_ext4"
export OSTREE_REPO
export OSTREE_BRANCHNAME
RAMDISK_EXT ?= ".ext4.gz"
RAMDISK_EXT_arm ?= ".ext4.gz.u-boot"
OSTREE_KERNEL ??= "${KERNEL_IMAGETYPE}"
IMAGE_CMD_ostree () {
if [ -z "$OSTREE_REPO" ]; then
bbfatal "OSTREE_REPO should be set in your local.conf"
fi
if [ -z "$OSTREE_BRANCHNAME" ]; then
bbfatal "OSTREE_BRANCHNAME should be set in your local.conf"
fi
OSTREE_ROOTFS=`mktemp -du ${WORKDIR}/ostree-root-XXXXX`
cp -a ${IMAGE_ROOTFS} ${OSTREE_ROOTFS}
chmod a+rx ${OSTREE_ROOTFS}
sync
cd ${OSTREE_ROOTFS}
# Create sysroot directory to which physical sysroot will be mounted
mkdir sysroot
ln -sf sysroot/ostree ostree
rm -rf tmp/*
ln -sf sysroot/tmp tmp
mkdir -p usr/rootdirs
mv etc usr/
# 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
if [ ! -d "usr/etc/tmpfiles.d" ]; then
mkdir usr/etc/tmpfiles.d
fi
tmpfiles_conf=usr/etc/tmpfiles.d/00ostree-tmpfiles.conf
echo "d /var/rootdirs 0755 root root -" >>${tmpfiles_conf}
echo "L /var/rootdirs/home - - - - /sysroot/home" >>${tmpfiles_conf}
# Preserve data in /home to be later copied to /sysroot/home by
# sysroot generating procedure
mkdir -p usr/homedirs
if [ -d "home" ] && [ ! -L "home" ]; then
mv home usr/homedirs/home
ln -sf var/rootdirs/home home
fi
# Move persistent directories to /var
dirs="opt mnt media srv"
for dir in ${dirs}; do
if [ -d ${dir} ] && [ ! -L ${dir} ]; then
if [ "$(ls -A $dir)" ]; then
bbwarn "Data in /$dir directory is not preserved by OSTree. Consider moving it under /usr"
fi
echo "d /var/rootdirs/${dir} 0755 root root -" >>${tmpfiles_conf}
rm -rf ${dir}
ln -sf var/rootdirs/${dir} ${dir}
fi
done
if [ -d root ] && [ ! -L root ]; then
if [ "$(ls -A root)" ]; then
bberror "Data in /root directory is not preserved by OSTree."
fi
echo "d /var/roothome 0755 root root -" >>${tmpfiles_conf}
rm -rf root
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}/${OSTREE_KERNEL} | cut -f 1 -d " "`
cp ${DEPLOY_DIR_IMAGE}/${OSTREE_KERNEL} boot/vmlinuz-${checksum}
cp ${DEPLOY_DIR_IMAGE}/${OSTREE_INITRAMFS_IMAGE}-${MACHINE}${RAMDISK_EXT} 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} --xattrs --xattrs-include='*' -cjf ${OSTREE_TAR} .
sync
rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.rootfs.ostree.tar.bz2
ln -s ${IMAGE_NAME}.rootfs.ostree.tar.bz2 ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.rootfs.ostree.tar.bz2
if [ ! -d ${OSTREE_REPO} ]; then
ostree --repo=${OSTREE_REPO} init --mode=archive-z2
fi
# Commit the result
ostree --repo=${OSTREE_REPO} commit \
--tree=dir=${OSTREE_ROOTFS} \
--skip-if-unchanged \
--branch=${OSTREE_BRANCHNAME} \
--subject="Commit-id: ${IMAGE_NAME}"
rm -rf ${OSTREE_ROOTFS}
}
|