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_ota.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_ota.bbclass')
-rw-r--r-- | classes/image_types_ota.bbclass | 148 |
1 files changed, 88 insertions, 60 deletions
diff --git a/classes/image_types_ota.bbclass b/classes/image_types_ota.bbclass index bb55e61..b9126ec 100644 --- a/classes/image_types_ota.bbclass +++ b/classes/image_types_ota.bbclass | |||
@@ -6,75 +6,103 @@ | |||
6 | # OSTree updates may require some space on boot file system for | 6 | # OSTree updates may require some space on boot file system for |
7 | # boot scripts, kernel and initramfs images | 7 | # boot scripts, kernel and initramfs images |
8 | # | 8 | # |
9 | BOOTFS_EXTRA_SIZE ?= "512" | 9 | |
10 | export BOOTFS_EXTRA_SIZE | 10 | inherit image |
11 | 11 | ||
12 | do_otaimg[depends] += "e2fsprogs-native:do_populate_sysroot \ | 12 | IMAGE_DEPENDS_otaimg = "e2fsprogs-native:do_populate_sysroot \ |
13 | parted-native:do_populate_sysroot \ | 13 | virtual/bootloader:do_deploy" |
14 | virtual/kernel:do_deploy \ | 14 | |
15 | virtual/bootloader:do_deploy \ | 15 | calculate_size () { |
16 | ${INITRD_IMAGE}:do_image_cpio \ | 16 | BASE=$1 |
17 | ${PN}:do_image_ext4" | 17 | SCALE=$2 |
18 | 18 | MIN=$3 | |
19 | ROOTFS ?= "${DEPLOY_DIR_IMAGE}/${IMAGE_BASENAME}-${MACHINE}.ext4" | 19 | MAX=$4 |
20 | INITRD_IMAGE ?= "core-image-minimal-initramfs" | 20 | EXTRA=$5 |
21 | INITRD ?= "${DEPLOY_DIR_IMAGE}/${INITRD_IMAGE}-${MACHINE}.cpio.gz" | 21 | ALIGN=$6 |
22 | 22 | ||
23 | build_bootfs () { | 23 | SIZE=`echo "$BASE * $SCALE" | bc -l` |
24 | KERNEL_FILE=${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} | 24 | REM=`echo $SIZE | cut -d "." -f 2` |
25 | KERNEL_SIZE=`du -Lbs ${KERNEL_FILE} | cut -f 1` | 25 | SIZE=`echo $SIZE | cut -d "." -f 1` |
26 | 26 | ||
27 | RAMDISK_FILE=${DEPLOY_DIR_IMAGE}/${INITRD_IMAGE}-${MACHINE}.cpio.gz | 27 | if [ -n "$REM" -o ! "$REM" -eq 0 ]; then |
28 | RAMDISK_SIZE=`du -Lbs ${RAMDISK_FILE} | cut -f 1` | 28 | SIZE=`expr $SIZE \+ 1` |
29 | 29 | fi | |
30 | EXTRA_BYTES=$(expr $BOOTFS_EXTRA_SIZE \* 1024 \* 1024) | 30 | |
31 | 31 | if [ "$SIZE" -lt "$MIN" ]; then | |
32 | TOTAL_SIZE=$(expr ${KERNEL_SIZE} \+ ${RAMDISK_SIZE} \+ ${EXTRA_BYTES}) | 32 | $SIZE=$MIN |
33 | TOTAL_BLOCKS=$(expr 1 \+ $TOTAL_SIZE / 1024) | 33 | fi |
34 | 34 | ||
35 | dd if=/dev/zero of=$1 bs=1024 count=${TOTAL_BLOCKS} | 35 | SIZE=`expr $SIZE \+ $EXTRA` |
36 | BOOTTMP=$(mktemp -d mkotaboot-XXX) | 36 | SIZE=`expr $SIZE \+ $ALIGN \- 1` |
37 | cp ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} ${BOOTTMP} | 37 | SIZE=`expr $SIZE \- $SIZE \% $ALIGN` |
38 | cp ${DEPLOY_DIR_IMAGE}/${INITRD_IMAGE}-${MACHINE}.cpio.gz ${BOOTTMP} | 38 | |
39 | mkfs.ext4 $1 -d ${BOOTTMP} | 39 | if [ -n "$MAX" ]; then |
40 | rm -rf $BOOTTMP | 40 | if [ "$SIZE" -gt "$MAX" ]; then |
41 | return -1 | ||
42 | fi | ||
43 | fi | ||
44 | |||
45 | echo "${SIZE}" | ||
41 | } | 46 | } |
42 | 47 | ||
43 | do_otaimg () { | 48 | export OSTREE_OSNAME |
44 | BOOTIMG=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.otaboot.ext4 | 49 | export OSTREE_BRANCHNAME |
45 | rm -f $BOOTIMG | 50 | export OSTREE_REPO |
46 | build_bootfs $BOOTIMG | ||
47 | 51 | ||
48 | ROOTIMG=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext4 | 52 | IMAGE_CMD_otaimg () { |
53 | if ${@bb.utils.contains('IMAGE_FSTYPES', 'otaimg', 'true', 'false', d)}; then | ||
54 | if [ -z "$OSTREE_REPO" ]; then | ||
55 | bbfatal "OSTREE_REPO should be set in your local.conf" | ||
56 | fi | ||
49 | 57 | ||
50 | BOOTFSBLOCKS=`du -bks ${BOOTIMG} | cut -f 1` | 58 | if [ -z "$OSTREE_OSNAME" ]; then |
59 | bbfatal "OSTREE_OSNAME should be set in your local.conf" | ||
60 | fi | ||
51 | 61 | ||
52 | ROOTFSBLOCKS=`du -bks ${ROOTIMG} | cut -f 1` | 62 | if [ -z "$OSTREE_BRANCHNAME" ]; then |
53 | TOTALSIZE=`expr $BOOTFSBLOCKS \+ $ROOTFSBLOCKS` | 63 | bbfatal "OSTREE_BRANCHNAME should be set in your local.conf" |
54 | END1=`expr $BOOTFSBLOCKS \* 1024` | 64 | fi |
55 | END2=`expr $END1 + 512` | ||
56 | END3=`expr \( $ROOTFSBLOCKS \* 1024 \) + $END1` | ||
57 | 65 | ||
58 | FULLIMG=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.otaimg | ||
59 | rm -rf ${FULLIMG} | ||
60 | 66 | ||
61 | dd if=/dev/zero of=${FULLIMG} bs=1024 seek=${TOTALSIZE} count=1 | 67 | PHYS_SYSROOT=`mktemp -d ${WORKDIR}/ota-sysroot-XXXXX` |
62 | parted ${FULLIMG} mklabel msdos | ||
63 | parted ${FULLIMG} mkpart primary ext4 0 ${END1}B | ||
64 | parted ${FULLIMG} unit B mkpart primary ext4 ${END2}B ${END3}B | ||
65 | 68 | ||
66 | OFFSET=`expr $END2 / 512` | 69 | ostree admin --sysroot=${PHYS_SYSROOT} init-fs ${PHYS_SYSROOT} |
70 | ostree admin --sysroot=${PHYS_SYSROOT} os-init ${OSTREE_OSNAME} | ||
67 | 71 | ||
68 | dd if=${BOOTIMG} of=${FULLIMG} conv=notrunc seek=1 bs=512 | 72 | mkdir -p ${PHYS_SYSROOT}/boot/loader.0 |
69 | dd if=${ROOTIMG} of=${FULLIMG} conv=notrunc seek=$OFFSET bs=512 | 73 | ln -s loader.0 ${PHYS_SYSROOT}/boot/loader |
70 | 74 | ||
71 | cd ${DEPLOY_DIR_IMAGE} | 75 | touch ${PHYS_SYSROOT}/boot/loader/uEnv.txt |
72 | rm -f ${IMAGE_LINK_NAME}.otaimg | 76 | |
73 | ln -s ${IMAGE_NAME}.otaimg ${IMAGE_LINK_NAME}.otaimg | 77 | ostree --repo=${PHYS_SYSROOT}/ostree/repo pull-local --remote=${OSTREE_OSNAME} ${OSTREE_REPO} ${OSTREE_BRANCHNAME} |
74 | } | 78 | ostree admin --sysroot=${PHYS_SYSROOT} deploy --os=${OSTREE_OSNAME} ${OSTREE_OSNAME}:${OSTREE_BRANCHNAME} |
79 | |||
80 | # Copy deployment /home to sysroot | ||
81 | HOME_TMP=`mktemp -d ${WORKDIR}/home-tmp-XXXXX` | ||
82 | tar --xattrs --xattrs-include='*' -C ${HOME_TMP} -xf ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.rootfs.ostree.tar.bz2 ./usr/homedirs | ||
83 | mv ${HOME_TMP}/usr/homedirs/home ${PHYS_SYSROOT}/ | ||
84 | rm -rf ${HOME_TMP} | ||
85 | |||
86 | OTA_ROOTFS_SIZE=$(calculate_size `du -ks $PHYS_SYSROOT | cut -f 1` "${IMAGE_OVERHEAD_FACTOR}" "${IMAGE_ROOTFS_SIZE}" "${IMAGE_ROOTFS_MAXSIZE}" `expr ${IMAGE_ROOTFS_EXTRA_SPACE}` "${IMAGE_ROOTFS_ALIGNMENT}") | ||
75 | 87 | ||
76 | addtask otaimg before do_build | 88 | if [ $OTA_ROOTFS_SIZE -lt 0 ]; then |
89 | exit -1 | ||
90 | fi | ||
91 | eval local COUNT=\"0\" | ||
92 | eval local MIN_COUNT=\"60\" | ||
93 | if [ $OTA_ROOTFS_SIZE -lt $MIN_COUNT ]; then | ||
94 | eval COUNT=\"$MIN_COUNT\" | ||
95 | fi | ||
96 | |||
97 | rm -rf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.otaimg | ||
98 | sync | ||
99 | dd if=/dev/zero of=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.otaimg seek=$OTA_ROOTFS_SIZE count=$COUNT bs=1024 | ||
100 | mkfs.ext4 ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.otaimg -d ${PHYS_SYSROOT} | ||
101 | rm -rf ${PHYS_SYSROOT} | ||
102 | |||
103 | rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.otaimg | ||
104 | ln -s ${IMAGE_NAME}.otaimg ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.otaimg | ||
105 | fi | ||
106 | } | ||
77 | 107 | ||
78 | IMAGE_TYPES += " otaimg" | 108 | IMAGE_TYPEDEP_otaimg = "ostree" |
79 | IMAGE_TYPES_MASKED += "otaimg" | ||
80 | IMAGE_TYPEDEP_otaimg = "ext4" | ||