From 359534502e426a3c3359d494bcba97d3bc34bc88 Mon Sep 17 00:00:00 2001 From: Jan Luebbe Date: Sun, 6 Sep 2015 17:58:52 +0200 Subject: [PATCH] initramfs-rauc-slot: support restoring the backup archive This change adds an initramfs module to mount the data partition and restore the backup to the overlay. It is enabled by adding it to the image-rauc-slot-initramfs recipe. Signed-off-by: Jan Luebbe --- .../images/image-rauc-slot-initramfs.bb | 2 +- .../initrdscripts/initramfs-rauc-slot.bb | 17 ++++++++-- .../initramfs-rauc-slot/restore_backup | 31 +++++++++++++++++++ .../sysmobts-v2/mount_data | 11 +++++++ .../sysmocom-bsc/mount_data | 11 +++++++ .../sysmocom-odu/mount_data | 11 +++++++ 6 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 recipes-core/initrdscripts/initramfs-rauc-slot/restore_backup create mode 100644 recipes-core/initrdscripts/initramfs-rauc-slot/sysmobts-v2/mount_data create mode 100644 recipes-core/initrdscripts/initramfs-rauc-slot/sysmocom-bsc/mount_data create mode 100644 recipes-core/initrdscripts/initramfs-rauc-slot/sysmocom-odu/mount_data diff --git a/recipes-core/images/image-rauc-slot-initramfs.bb b/recipes-core/images/image-rauc-slot-initramfs.bb index a6f3a91..45a2534 100644 --- a/recipes-core/images/image-rauc-slot-initramfs.bb +++ b/recipes-core/images/image-rauc-slot-initramfs.bb @@ -1,6 +1,6 @@ DESCRIPTION = "slot initramfs" -PACKAGE_INSTALL = "initramfs-framework-base initramfs-module-debug initramfs-module-rauc-overlay busybox udev base-passwd ${ROOTFS_BOOTSTRAP_INSTALL}" +PACKAGE_INSTALL = "initramfs-framework-base initramfs-module-debug initramfs-module-rauc-overlay initramfs-module-rauc-backup busybox udev base-passwd ${ROOTFS_BOOTSTRAP_INSTALL}" # Do not pollute the initrd image with rootfs features #IMAGE_FEATURES = "" diff --git a/recipes-core/initrdscripts/initramfs-rauc-slot.bb b/recipes-core/initrdscripts/initramfs-rauc-slot.bb index 755d96d..09e4aff 100644 --- a/recipes-core/initrdscripts/initramfs-rauc-slot.bb +++ b/recipes-core/initrdscripts/initramfs-rauc-slot.bb @@ -2,12 +2,14 @@ SUMMARY = "Modular initramfs system components for RAUC" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" -PR = "r1" +PR = "r2" inherit allarch SRC_URI = "file://overlay \ - file://rescue" + file://rescue \ + file://mount_data \ + file://restore_backup" do_install() { install -d ${D}/init.d @@ -17,10 +19,15 @@ do_install() { # rescue install -m 0755 ${WORKDIR}/rescue ${D}/init.d/10-rescue + + # backup + install -m 0755 ${WORKDIR}/mount_data ${D}/init.d/25-mount_data + install -m 0755 ${WORKDIR}/restore_backup ${D}/init.d/26-restore_backup } PACKAGES = "initramfs-module-rauc-overlay \ - initramfs-module-rauc-rescue" + initramfs-module-rauc-rescue \ + initramfs-module-rauc-backup" SUMMARY_initramfs-module-rauc-overlay = "initramfs support for overlayfs (ubifs&squashfs)" RDEPENDS_initramfs-module-rauc-overlay = "initramfs-framework-base" @@ -29,3 +36,7 @@ FILES_initramfs-module-rauc-overlay = "/init.d/20-overlay" SUMMARY_initramfs-module-rauc-rescue = "initramfs rescue mode support" RDEPENDS_initramfs-module-rauc-rescue = "initramfs-framework-base" FILES_initramfs-module-rauc-rescue = "/init.d/10-rescue" + +SUMMARY_initramfs-module-rauc-backup = "initramfs backup restore support" +RDEPENDS_initramfs-module-rauc-backup = "initramfs-module-rauc-overlay" +FILES_initramfs-module-rauc-backup = "/init.d/25-mount_data /init.d/26-restore_backup" diff --git a/recipes-core/initrdscripts/initramfs-rauc-slot/restore_backup b/recipes-core/initrdscripts/initramfs-rauc-slot/restore_backup new file mode 100644 index 0000000..17ae86b --- /dev/null +++ b/recipes-core/initrdscripts/initramfs-rauc-slot/restore_backup @@ -0,0 +1,31 @@ +#!/bin/sh + +BACKUP_FILE=/rootfs/data/sysmocom-backup.tar + +restore_backup_enabled() { + if [ ! -e "$BACKUP_FILE" ] ; then + info "The backup file '$BACKUP_FILE' does not exist, skipping restore..." + return 1 + fi + + return 0 +} + +restore_backup_extract() { + # List the files and check if grep hits something + SEARCH=`tar -tvf $1 | grep $2` + RES=$? + if [ $RES = 0 ]; then + tar -C /rootfs/tmp/ -xvf $1 $2 + cp -a /rootfs/tmp/content/* /rootfs/ + rm -rf /rootfs/tmp/content + else + echo "Directory '$2' is not in backup '$1'." + fi +} + +restore_backup_run() { + info "Extracting files from the backup '$BACKUP_FILE'" + restore_backup_extract $BACKUP_FILE content/etc || fatal "Failed!" + restore_backup_extract $BACKUP_FILE content/var/lib/osmocom || fatal "Failed!" +} diff --git a/recipes-core/initrdscripts/initramfs-rauc-slot/sysmobts-v2/mount_data b/recipes-core/initrdscripts/initramfs-rauc-slot/sysmobts-v2/mount_data new file mode 100644 index 0000000..0491cea --- /dev/null +++ b/recipes-core/initrdscripts/initramfs-rauc-slot/sysmobts-v2/mount_data @@ -0,0 +1,11 @@ +#!/bin/sh + +mount_data_enabled() { + return 0 +} + +mount_data_run() { + info "Mounting data..." + mkdir -p /rootfs/data + mount -t ubifs ubi0:data /rootfs/data +} diff --git a/recipes-core/initrdscripts/initramfs-rauc-slot/sysmocom-bsc/mount_data b/recipes-core/initrdscripts/initramfs-rauc-slot/sysmocom-bsc/mount_data new file mode 100644 index 0000000..46a4ed1 --- /dev/null +++ b/recipes-core/initrdscripts/initramfs-rauc-slot/sysmocom-bsc/mount_data @@ -0,0 +1,11 @@ +#!/bin/sh + +mount_data_enabled() { + return 0 +} + +mount_data_run() { + info "Mounting data..." + mkdir -p /rootfs/data + mount -t ext4 /dev/sda4 /rootfs/data +} diff --git a/recipes-core/initrdscripts/initramfs-rauc-slot/sysmocom-odu/mount_data b/recipes-core/initrdscripts/initramfs-rauc-slot/sysmocom-odu/mount_data new file mode 100644 index 0000000..0491cea --- /dev/null +++ b/recipes-core/initrdscripts/initramfs-rauc-slot/sysmocom-odu/mount_data @@ -0,0 +1,11 @@ +#!/bin/sh + +mount_data_enabled() { + return 0 +} + +mount_data_run() { + info "Mounting data..." + mkdir -p /rootfs/data + mount -t ubifs ubi0:data /rootfs/data +}