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 <jluebbe@debian.org>
This commit is contained in:
Jan Luebbe 2015-09-06 17:58:52 +02:00
parent 0d7f0b449f
commit 359534502e
6 changed files with 79 additions and 4 deletions

View File

@ -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 = ""

View File

@ -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"

View File

@ -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!"
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}