Merge changes from topic "fs-images"

* changes:
  rauc: Simplify certificate installation
  rauc: install the config file as a package
  RAUC: turn this into a configurable target
  Creating a copy of the /boot filesystem for an extra partition
diff --git a/board/czechlight/clearfog/mk-rauc-bundle.sh b/board/czechlight/clearfog/mk-rauc-bundle.sh
deleted file mode 100755
index 12241fb..0000000
--- a/board/czechlight/clearfog/mk-rauc-bundle.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/sh
-
-RAUC_BUILD_DIR=${BUILD_DIR}/rauc-work-tmp
-RAUC_IMAGE=${BINARIES_DIR}/update.raucb
-ROOTFS_NAME=rootfs.tar.xz
-EMPTY_TAR_NAME=cfg.tar.xz
-RAUC_HOOK=${RAUC_BUILD_DIR}/hook.sh
-
-rm -rf ${RAUC_BUILD_DIR}
-mkdir ${RAUC_BUILD_DIR}
-rm -f ${RAUC_IMAGE}
-
-ln ${BINARIES_DIR}/${ROOTFS_NAME} ${RAUC_BUILD_DIR}/
-tar -cJf ${RAUC_BUILD_DIR}/${EMPTY_TAR_NAME} -T /dev/null
-cp ${BR2_EXTERNAL_CZECHLIGHT_PATH}/board/czechlight/common/rauc-hook.sh ${RAUC_HOOK}
-cat > ${RAUC_BUILD_DIR}/manifest.raucm << EOF
-[update]
-compatible=czechlight-clearfog
-version=dev
-
-[hooks]
-filename=hook.sh
-
-[image.rootfs]
-filename=${ROOTFS_NAME}
-
-[image.cfg]
-filename=${EMPTY_TAR_NAME}
-hooks=post-install
-EOF
-
-rauc \
-  --cert ${BR2_EXTERNAL_CZECHLIGHT_PATH}/crypto/rauc-cert.pem \
-  --key ${BR2_EXTERNAL_CZECHLIGHT_PATH}/crypto/rauc-key.pem \
-  bundle ${RAUC_BUILD_DIR} ${RAUC_IMAGE}
diff --git a/board/czechlight/common/install-rauc-cert.sh b/board/czechlight/common/install-rauc-cert.sh
deleted file mode 100755
index bff359b..0000000
--- a/board/czechlight/common/install-rauc-cert.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-install -m 0644 -D ${BR2_EXTERNAL_CZECHLIGHT_PATH}/crypto/rauc-cert.pem $TARGET_DIR/etc/rauc/keyring.pem
diff --git a/board/czechlight/common/rauc-manifest.raucm.in b/board/czechlight/common/rauc-manifest.raucm.in
new file mode 100644
index 0000000..6a5a265
--- /dev/null
+++ b/board/czechlight/common/rauc-manifest.raucm.in
@@ -0,0 +1,13 @@
+[update]
+compatible=CZECHLIGHT_RAUC_COMPATIBLE
+version=CZECHLIGHT_RAUC_IMAGE_VERSION
+
+[hooks]
+filename=hook.sh
+
+[image.rootfs]
+filename=rootfs.tar.xz
+
+[image.cfg]
+filename=cfg.tar.xz
+hooks=post-install
diff --git a/configs/czechlight_clearfog_defconfig b/configs/czechlight_clearfog_defconfig
index bbe9ae7..ce20748 100644
--- a/configs/czechlight_clearfog_defconfig
+++ b/configs/czechlight_clearfog_defconfig
@@ -12,8 +12,8 @@
 BR2_TARGET_GENERIC_GETTY_BAUDRATE_115200=y
 # BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
 BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/overlay/ $(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/clearfog/overlay/"
-BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/install-rauc-cert.sh $(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/clearfog/copy-boot-scr.sh"
-BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh $(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/clearfog/mk-rauc-bundle.sh ${BR2_EXTERNAL_CZECHLIGHT_PATH}/board/czechlight/clearfog/usb-flash-genimage.sh"
+BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/clearfog/copy-boot-scr.sh"
+BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh ${BR2_EXTERNAL_CZECHLIGHT_PATH}/board/czechlight/clearfog/usb-flash-genimage.sh"
 BR2_ROOTFS_POST_SCRIPT_ARGS="-c $(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/clearfog/genimage.cfg"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
@@ -67,7 +67,11 @@
 BR2_PACKAGE_HOST_DOSFSTOOLS=y
 BR2_PACKAGE_HOST_GENIMAGE=y
 BR2_PACKAGE_HOST_MTOOLS=y
-BR2_PACKAGE_HOST_RAUC=y
-BR2_PACKAGE_CZECHLIGHT_CFG_FS=y
 CZECHLIGHT_CFG_FS_SIZE="256M"
+CZECHLIGHT_RAUC_ROOTFS=y
+CZECHLIGHT_RAUC_COMPATIBLE="czechlight-clearfog"
+CZECHLIGHT_RAUC_SLOT_A_ROOTFS_DEV="/dev/mmcblk0p1"
+CZECHLIGHT_RAUC_SLOT_A_CFG_DEV="/dev/mmcblk0p2"
+CZECHLIGHT_RAUC_SLOT_B_ROOTFS_DEV="/dev/mmcblk0p3"
+CZECHLIGHT_RAUC_SLOT_B_CFG_DEV="/dev/mmcblk0p4"
 CZECHLIGHT_NETCONF=y
diff --git a/package/Config.in b/package/Config.in
index 5b9950d..17cd498 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1,3 +1,5 @@
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/cla-sysrepo/Config.in"
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-cfg-fs/Config.in"
+source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-rauc/Config.in"
+source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/czechlight-separate-boot/Config.in"
 source "$BR2_EXTERNAL_CZECHLIGHT_PATH/package/grub2-tools/Config.in"
diff --git a/package/czechlight-rauc/Config.in b/package/czechlight-rauc/Config.in
new file mode 100644
index 0000000..71ef0da
--- /dev/null
+++ b/package/czechlight-rauc/Config.in
@@ -0,0 +1,42 @@
+config CZECHLIGHT_RAUC_ROOTFS
+	bool "Create RAUC update bundle"
+	select BR2_PACKAGE_CZECHLIGHT_CFG_FS
+	select BR2_PACKAGE_HOST_RAUC
+	select BR2_PACKAGE_CZECHLIGHT_RAUC
+
+if CZECHLIGHT_RAUC_ROOTFS
+
+config CZECHLIGHT_RAUC_COMPATIBLE
+	string "HW compatibility string"
+	help
+	  Unique identifier which specifies what boards accept a given SW image.
+
+config BR2_PACKAGE_CZECHLIGHT_RAUC
+	bool
+
+config CZECHLIGHT_RAUC_BOOTLOADER
+	string
+	default uboot if BR2_TARGET_UBOOT
+	default grub if BR2_TARGET_GRUB2
+
+config CZECHLIGHT_RAUC_SLOT_A_ROOTFS_DEV
+	string "device name (rootfs slot A)"
+	help
+	  Name of the device/partition where rootfs for slot A will be
+
+config CZECHLIGHT_RAUC_SLOT_A_CFG_DEV
+	string "device name (cfg slot A)"
+	help
+	  Name of the device/partition where cfg for slot A will be
+
+config CZECHLIGHT_RAUC_SLOT_B_ROOTFS_DEV
+	string "device name (rootfs slot B)"
+	help
+	  Name of the device/partition where rootfs for slot B will be
+
+config CZECHLIGHT_RAUC_SLOT_B_CFG_DEV
+	string "device name (cfg slot B)"
+	help
+	  Name of the device/partition where cfg for slot B will be
+
+endif # CZECHLIGHT_RAUC_ROOTFS
diff --git a/package/czechlight-rauc/czechlight-rauc.mk b/package/czechlight-rauc/czechlight-rauc.mk
new file mode 100644
index 0000000..8c7d70d
--- /dev/null
+++ b/package/czechlight-rauc/czechlight-rauc.mk
@@ -0,0 +1,74 @@
+CZECHLIGHT_RAUC_TMP_TARGET_DIR = $(FS_DIR)/rootfs.czechlight-rauc.tmp
+
+CZECHLIGHT_RAUC_IMAGE_VERSION = dev
+
+$(BINARIES_DIR)/update.raucb: host-rauc rootfs-tar
+	@$(call MESSAGE,"Generating RAUC update bundle")
+	$(RM) -rf $(CZECHLIGHT_RAUC_TMP_TARGET_DIR)
+	mkdir -p $(CZECHLIGHT_RAUC_TMP_TARGET_DIR)
+	sed \
+		-e 's|CZECHLIGHT_RAUC_IMAGE_VERSION|$(call qstrip,$(CZECHLIGHT_RAUC_IMAGE_VERSION))|' \
+		-e 's|CZECHLIGHT_RAUC_COMPATIBLE|$(call qstrip,$(CZECHLIGHT_RAUC_COMPATIBLE))|' \
+		$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/rauc-manifest.raucm.in \
+		> $(CZECHLIGHT_RAUC_TMP_TARGET_DIR)/manifest.raucm
+
+	$(RM) -f $(BINARIES_DIR)/update.raucb
+	ln $(BINARIES_DIR)/rootfs.tar.xz $(CZECHLIGHT_RAUC_TMP_TARGET_DIR)
+	tar -cJf $(CZECHLIGHT_RAUC_TMP_TARGET_DIR)/cfg.tar.xz -T /dev/null
+	cp $(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/rauc-hook.sh $(CZECHLIGHT_RAUC_TMP_TARGET_DIR)/hook.sh
+
+	$(HOST_DIR)/usr/bin/rauc \
+		--cert $(BR2_EXTERNAL_CZECHLIGHT_PATH)/crypto/rauc-cert.pem \
+		--key $(BR2_EXTERNAL_CZECHLIGHT_PATH)/crypto/rauc-key.pem \
+		bundle $(CZECHLIGHT_RAUC_TMP_TARGET_DIR) $(BINARIES_DIR)/update.raucb
+
+rootfs-czechlight-rauc: $(BINARIES_DIR)/update.raucb
+
+rootfs-czechlight-rauc-show-depends:
+	@echo host-rauc rootfs-tar
+
+.PHONY: rootfs-czechlight-rauc rootfs-czechlight-rauc-show-depends
+
+ifeq ($(CZECHLIGHT_RAUC_ROOTFS),y)
+TARGETS_ROOTFS += rootfs-czechlight-rauc
+ifeq ($(call qstrip,$(CZECHLIGHT_RAUC_COMPATIBLE)),)
+$(error CZECHLIGHT_RAUC_COMPATIBLE cannot be empty)
+endif
+endif
+
+CZECHLIGHT_RAUC_INSTALL_TARGET = YES
+
+ifeq ($(BR2_PACKAGE_CZECHLIGHT_RAUC),y)
+
+ifeq ($(call qstrip,$(CZECHLIGHT_RAUC_BOOTLOADER)),)
+$(error Unsupported bootloader for RAUC)
+endif
+
+ifeq ($(call qstrip,$(CZECHLIGHT_RAUC_SLOT_A_ROOTFS_DEV)),)
+$(error CZECHLIGHT_RAUC_SLOT_A_ROOTFS_DEV cannot be empty)
+endif
+ifeq ($(call qstrip,$(CZECHLIGHT_RAUC_SLOT_A_CFG_DEV)),)
+$(error CZECHLIGHT_RAUC_SLOT_A_CFG_DEV cannot be empty)
+endif
+ifeq ($(call qstrip,$(CZECHLIGHT_RAUC_SLOT_B_ROOTFS_DEV)),)
+$(error CZECHLIGHT_RAUC_SLOT_B_ROOTFS_DEV cannot be empty)
+endif
+ifeq ($(call qstrip,$(CZECHLIGHT_RAUC_SLOT_B_CFG_DEV)),)
+$(error CZECHLIGHT_RAUC_SLOT_B_CFG_DEV cannot be empty)
+endif
+
+endif # BR2_PACKAGE_CZECHLIGHT_RAUC
+
+define CZECHLIGHT_RAUC_INSTALL_TARGET_CMDS
+	$(INSTALL) -D -m 0644 $(BR2_EXTERNAL_CZECHLIGHT_PATH)/crypto/rauc-cert.pem $(TARGET_DIR)/etc/rauc/keyring.pem
+	$(INSTALL) -D -m 0644 $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/czechlight-rauc/system.conf.in $(TARGET_DIR)/etc/rauc/system.conf
+	sed -i -E -e "s|CZECHLIGHT_RAUC_BOOTLOADER|$(CZECHLIGHT_RAUC_BOOTLOADER)|" \
+		-e 's|CZECHLIGHT_RAUC_COMPATIBLE|$(call qstrip,$(CZECHLIGHT_RAUC_COMPATIBLE))|' \
+		-e "s|CZECHLIGHT_RAUC_SLOT_A_ROOTFS_DEV|$(call qstrip,$(CZECHLIGHT_RAUC_SLOT_A_ROOTFS_DEV))|" \
+		-e "s|CZECHLIGHT_RAUC_SLOT_A_CFG_DEV|$(call qstrip,$(CZECHLIGHT_RAUC_SLOT_A_CFG_DEV))|" \
+		-e "s|CZECHLIGHT_RAUC_SLOT_B_ROOTFS_DEV|$(call qstrip,$(CZECHLIGHT_RAUC_SLOT_B_ROOTFS_DEV))|" \
+		-e "s|CZECHLIGHT_RAUC_SLOT_B_CFG_DEV|$(call qstrip,$(CZECHLIGHT_RAUC_SLOT_B_CFG_DEV))|" \
+		$(TARGET_DIR)/etc/rauc/system.conf
+endef
+
+$(eval $(generic-package))
diff --git a/package/czechlight-rauc/system.conf.in b/package/czechlight-rauc/system.conf.in
new file mode 100644
index 0000000..b2476eb
--- /dev/null
+++ b/package/czechlight-rauc/system.conf.in
@@ -0,0 +1,28 @@
+[system]
+compatible=czechlight-epia-geode
+bootloader=CZECHLIGHT_RAUC_BOOTLOADER_NAME
+
+[keyring]
+path=/etc/rauc/keyring.pem
+
+[slot.rootfs.0]
+device=CZECHLIGHT_RAUC_SLOT_A_ROOTFS_DEV
+type=ext4
+bootname=A
+
+[slot.cfg.0]
+device=CZECHLIGHT_RAUC_SLOT_A_CFG_DEV
+type=ext4
+parent=rootfs.0
+ignore-checksum=true
+
+[slot.rootfs.1]
+device=CZECHLIGHT_RAUC_SLOT_B_ROOTFS_DEV
+type=ext4
+bootname=B
+
+[slot.cfg.1]
+device=CZECHLIGHT_RAUC_SLOT_B_CFG_DEV
+type=ext4
+parent=rootfs.1
+ignore-checksum=true
diff --git a/package/czechlight-separate-boot/Config.in b/package/czechlight-separate-boot/Config.in
new file mode 100644
index 0000000..0e1bf97
--- /dev/null
+++ b/package/czechlight-separate-boot/Config.in
@@ -0,0 +1,14 @@
+config BR2_TARGET_ROOTFS_CZECHLIGHT_SEPARATE_BOOT
+	bool "Separate /boot partition"
+	help
+	  Builds a standalone ext2 image with the /boot directory from the real rootfs.
+
+if BR2_TARGET_ROOTFS_CZECHLIGHT_SEPARATE_BOOT
+
+config CZECHLIGHT_SEPARATE_BOOT_SIZE
+	string "exact size"
+	default "4M"
+	help
+	  Size of the /boot filesystem image.
+
+endif # BR2_TARGET_ROOTFS_CZECHLIGHT_SEPARATE_BOOT
diff --git a/package/czechlight-separate-boot/czechlight-separate-boot.mk b/package/czechlight-separate-boot/czechlight-separate-boot.mk
new file mode 100644
index 0000000..a41172e
--- /dev/null
+++ b/package/czechlight-separate-boot/czechlight-separate-boot.mk
@@ -0,0 +1,20 @@
+define CZECHLIGHT_SEPARATE_BOOT_SYMLINK_BOOT
+	cd $(TARGET_DIR)/boot
+	ln -s . boot
+endef
+
+ROOTFS_CZECHLIGHT_SEPARATE_BOOT_PRE_GEN_HOOKS += CZECHLIGHT_SEPARATE_BOOT_SYMLINK_BOOT
+
+ROOTFS_CZECHLIGHT_SEPARATE_BOOT_DEPENDENCIES = host-e2fsprogs
+
+define ROOTFS_CZECHLIGHT_SEPARATE_BOOT_CMD
+	rm -f $@
+	$(HOST_DIR)/sbin/mkfs.ext2 -d $(TARGET_DIR)/boot -L /boot $@ \
+		$(call qstrip,$(CZECHLIGHT_SEPARATE_BOOT_SIZE))
+endef
+
+ifeq ($(BR2_TARGET_ROOTFS_CZECHLIGHT_SEPARATE_BOOT)-$(call qstrip,$(CZECHLIGHT_SEPARATE_BOOT_SIZE)),y-)
+$(error CZECHLIGHT_SEPARATE_BOOT_SIZE cannot be empty)
+endif
+
+$(eval $(rootfs))