diff --git a/recipes-apps/sysmocom-backup-data/files/default.files b/recipes-apps/sysmocom-backup-data/files/default.files new file mode 100644 index 0000000..fb4d363 --- /dev/null +++ b/recipes-apps/sysmocom-backup-data/files/default.files @@ -0,0 +1,20 @@ +etc/hostname +etc/ifplugd.sh +etc/network/interfaces +etc/openvpn +etc/opkg/sysmocom-config.conf +etc/osmocom/osmo-bsc-mgcp.cfg +etc/osmocom/osmo-bsc.cfg +etc/osmocom/osmo-bts.cfg +etc/osmocom/osmo-nitb.cfg +etc/osmocom/osmo-pcu.cfg +etc/osmocom/osmo-sgsn.cfg +etc/systemd/system/multi-user.target.wants/osmo-nitb.service +etc/systemd/system/multi-user.target.wants/osmo-bsc.service +etc/systemd/system/multi-user.target.wants/osmo-sgsn.service +etc/ggsn.conf +etc/default +var/lib/osmocom/hlr.sqlite3 +etc/lcr +etc/udhcpd.conf +etc/sysmocom/backup.d diff --git a/recipes-apps/sysmocom-backup-data/files/sysmobts-v2/data.mount b/recipes-apps/sysmocom-backup-data/files/sysmobts-v2/data.mount new file mode 100644 index 0000000..f07f6b0 --- /dev/null +++ b/recipes-apps/sysmocom-backup-data/files/sysmobts-v2/data.mount @@ -0,0 +1,7 @@ +[Unit] +Description=/data + +[Mount] +What=ubi0:data +Where=/data +Type=ubifs diff --git a/recipes-apps/sysmocom-backup-data/files/sysmocom-backup b/recipes-apps/sysmocom-backup-data/files/sysmocom-backup new file mode 100755 index 0000000..4deb890 --- /dev/null +++ b/recipes-apps/sysmocom-backup-data/files/sysmocom-backup @@ -0,0 +1,56 @@ +#!/bin/sh + + +# Make sure to look at sysmocom-restore to check if the file would +# be restored right. Currently only some dirs get restored. +FILES="etc/sysmocom/backup.d" + +# Pick some extra files +if [ -e /etc/sysmocom/backup.d/ ]; then + for extra in `ls /etc/sysmocom/backup.d/*.backup`; + do + echo "Add extras from $extra." + FILES="$FILES `cat $extra`" + done +fi + +DATE=`date +%Y%m%d` + + +do_backup_files() { + BACKUP_FILE="/data/sysmocom-backup_$DATE.tar" + + # 0. Sanity checking + if [ -e $BACKUP_FILE ]; then + echo "The backup file '$BACKUP_FILE' already exists. Exiting!" + exit 1 + fi + + # 1. Create an empty archive.. + tar -cf $BACKUP_FILE --files-from=/dev/null + + # 2. Add all the files... we need + for file in $FILES; + do + if [ -e "/$file" ]; then + tar -rf $BACKUP_FILE --transform='s,^,content/,' -C / $file + fi + done + + # 3. Generate more information + NAME="/tmp/backup.$RANDOM" + mkdir $NAME + opkg list_installed > $NAME/installed_packages + /sbin/ifconfig | grep HWaddr | cut -d ' ' -f 11 > $NAME/mac_addr + + # 4. Add the more information + tar -rf $BACKUP_FILE --transform='s,^,info/,' -C $NAME installed_packages mac_addr + + # 5. Create stable link + ln -sf $BACKUP_FILE /data/sysmocom-backup.tar + + # 6. + echo "The backup was stored to $BACKUP_FILE" +} + +do_backup_files diff --git a/recipes-apps/sysmocom-backup-data/files/sysmocom-bsc/data.mount b/recipes-apps/sysmocom-backup-data/files/sysmocom-bsc/data.mount new file mode 100644 index 0000000..2a37a57 --- /dev/null +++ b/recipes-apps/sysmocom-backup-data/files/sysmocom-bsc/data.mount @@ -0,0 +1,7 @@ +[Unit] +Description=/data + +[Mount] +What=/dev/sda4 +Where=/data +Type=ext4 diff --git a/recipes-apps/sysmocom-backup-data/files/sysmocom-odu/data.mount b/recipes-apps/sysmocom-backup-data/files/sysmocom-odu/data.mount new file mode 100644 index 0000000..f07f6b0 --- /dev/null +++ b/recipes-apps/sysmocom-backup-data/files/sysmocom-odu/data.mount @@ -0,0 +1,7 @@ +[Unit] +Description=/data + +[Mount] +What=ubi0:data +Where=/data +Type=ubifs diff --git a/recipes-apps/sysmocom-backup-data/files/sysmocom-restore b/recipes-apps/sysmocom-backup-data/files/sysmocom-restore new file mode 100755 index 0000000..08dafe8 --- /dev/null +++ b/recipes-apps/sysmocom-backup-data/files/sysmocom-restore @@ -0,0 +1,26 @@ +#!/bin/sh + +do_extract() { + # List the files and check if grep hits something + SEARCH=`tar -tvf $1 | grep $2` + RES=$? + if [ $RES = 0 ]; then + tar --transform='s,^content/,,' -C / -xvf $1 $2 + else + echo "Directory '$2' is not in backup '$1'." + fi +} + +do_restore_files() { + BACKUP_FILE=$1 + if [ ! -e "$BACKUP_FILE" ] ; then + echo "The backup file '$BACKUP_FILE' does not exist. Exiting!" + exit 1 + fi + + echo "Going to extract files from the backup '$BACKUP_FILE'" + do_extract $BACKUP_FILE content/etc + do_extract $BACKUP_FILE content/var/lib/osmocom +} + +do_restore_files $1 diff --git a/recipes-apps/sysmocom-backup-data/files/sysmocom-restore.service b/recipes-apps/sysmocom-backup-data/files/sysmocom-restore.service new file mode 100644 index 0000000..0c027a5 --- /dev/null +++ b/recipes-apps/sysmocom-backup-data/files/sysmocom-restore.service @@ -0,0 +1,12 @@ +[Unit] +Description=Restore Configuration Backup +Requires=data.mount +After=data.mount + +[Service] +Type=oneshot +RemainAfterExit=true +ExecStart=/usr/sbin/sysmocom-restore /data/sysmocom-backup.tar + +[Install] +WantedBy=multi-user.target diff --git a/recipes-apps/sysmocom-backup-data/sysmocom-backup-data_1.0.bb b/recipes-apps/sysmocom-backup-data/sysmocom-backup-data_1.0.bb new file mode 100644 index 0000000..07320f5 --- /dev/null +++ b/recipes-apps/sysmocom-backup-data/sysmocom-backup-data_1.0.bb @@ -0,0 +1,37 @@ +DESCRIPTION = "sysmocom config backup and restore scripts" +LICENSE = "GPLv3+" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" +PR = "r12" + +SRC_URI = " \ + file://sysmocom-backup \ + file://sysmocom-restore \ + file://data.mount \ + file://sysmocom-restore.service \ + file://default.files \ +" +RDEPENDS_${PN} = "tar" +RCONFLICTS_${PN} = "symocom-backup" + +inherit systemd + +do_install() { + install -d ${D}${sbindir} + install -m 0755 ${WORKDIR}/sysmocom-backup ${D}${sbindir}/ + install -m 0755 ${WORKDIR}/sysmocom-restore ${D}${sbindir}/ + + install -d ${D}${sysconfdir}/sysmocom/backup.d + install -m 0644 ${WORKDIR}/default.files ${D}${sysconfdir}/sysmocom/backup.d/ + + install -d ${D}${systemd_unitdir}/system + install -m 0644 ${WORKDIR}/data.mount ${D}${systemd_unitdir}/system/ + install -m 0644 ${WORKDIR}/sysmocom-restore.service ${D}${systemd_unitdir}/system/ +} + +PACKAGES =+ "${PN}-default" + +FILES_${PN}-default = "${sysconfdir}/sysmocom/backup.d/" + +SYSTEMD_PACKAGES = "${PN}" +SYSTEMD_SERVICE_${PN} = "data.mount sysmocom-restore.service" +SYSTEMD_AUTO_ENABLE_${PN} = "enable"