From 6a59dcb1e1e55135c0c5d552ce4c71b7eb6dcab4 Mon Sep 17 00:00:00 2001
From: j1nx
Date: Thu, 4 Feb 2021 09:45:00 +0100
Subject: [PATCH] [DONE] Implementation of own growdisk architecture. This is
temporarily till we switch to A/B mirrored rootfs and data-overlay for all
writable mounts.
---
buildroot-external/Config.in | 1 +
.../configs/rpi4_64-gui_defconfig | 7 +++++-
.../package/growdisk-service/Config.in | 6 +++++
.../package/growdisk-service/growdisk | 24 +++++++++++++++++++
.../growdisk-service/growdisk-service.mk | 20 ++++++++++++++++
.../package/growdisk-service/growdisk.service | 14 +++++++++++
.../usr/lib/repart.d/50-root.conf | 2 --
.../lib/systemd/system-preset/10-ovos.preset | 2 +-
8 files changed, 72 insertions(+), 4 deletions(-)
create mode 100644 buildroot-external/package/growdisk-service/Config.in
create mode 100755 buildroot-external/package/growdisk-service/growdisk
create mode 100644 buildroot-external/package/growdisk-service/growdisk-service.mk
create mode 100644 buildroot-external/package/growdisk-service/growdisk.service
delete mode 100644 buildroot-external/rootfs-overlay/usr/lib/repart.d/50-root.conf
diff --git a/buildroot-external/Config.in b/buildroot-external/Config.in
index ff000d4b..436a6001 100644
--- a/buildroot-external/Config.in
+++ b/buildroot-external/Config.in
@@ -7,6 +7,7 @@ menu "Additional drivers, libraries and/or applications"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/docbook-xml/Config.in"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/docbook-xsl/Config.in"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/fann/Config.in"
+ source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/growdisk-service/Config.in"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/hostname-service/Config.in"
menu "KDE Framework and Plasma"
source "$BR2_EXTERNAL_OPENVOICEOS_PATH/package/kf5-attica/Config.in"
diff --git a/buildroot-external/configs/rpi4_64-gui_defconfig b/buildroot-external/configs/rpi4_64-gui_defconfig
index f37aa74a..22185a17 100644
--- a/buildroot-external/configs/rpi4_64-gui_defconfig
+++ b/buildroot-external/configs/rpi4_64-gui_defconfig
@@ -288,6 +288,10 @@ BR2_PACKAGE_WILC1000_FIRMWARE=y
BR2_PACKAGE_WILINK_BT_FIRMWARE=y
BR2_PACKAGE_ZD1211_FIRMWARE=y
BR2_PACKAGE_DBUS_CPP=y
+BR2_PACKAGE_GPTFDISK=y
+BR2_PACKAGE_GPTFDISK_GDISK=y
+BR2_PACKAGE_GPTFDISK_SGDISK=y
+BR2_PACKAGE_GPTFDISK_CGDISK=y
BR2_PACKAGE_KBD=y
BR2_PACKAGE_PARTED=y
BR2_PACKAGE_RASPI_GPIO=y
@@ -409,7 +413,6 @@ BR2_PACKAGE_LINUX_PAM=y
BR2_PACKAGE_PROTOBUF=y
BR2_PACKAGE_LIBESTR=y
BR2_PACKAGE_LIBUNISTRING=y
-BR2_PACKAGE_NCURSES_WCHAR=y
BR2_PACKAGE_NCURSES_TARGET_PROGS=y
BR2_PACKAGE_PCRE_16=y
BR2_PACKAGE_PCRE_32=y
@@ -464,6 +467,7 @@ BR2_PACKAGE_SYSTEMD_RANDOMSEED=y
BR2_PACKAGE_SYSTEMD_REPART=y
# BR2_PACKAGE_SYSTEMD_RESOLVED is not set
BR2_PACKAGE_TAR=y
+BR2_PACKAGE_UTIL_LINUX_BINARIES=y
BR2_PACKAGE_UTIL_LINUX_HWCLOCK=y
BR2_PACKAGE_UTIL_LINUX_KILL=y
BR2_PACKAGE_UTIL_LINUX_MORE=y
@@ -494,6 +498,7 @@ BR2_PACKAGE_ALSA_PLUGINS=y
BR2_PACKAGE_BARESIP=y
BR2_PACKAGE_BTSPEAKER=y
BR2_PACKAGE_FANN=y
+BR2_PACKAGE_GROWDISK_SERVICE=y
BR2_PACKAGE_HOSTNAME_SERVICE=y
BR2_PACKAGE_KF5_BREEZE_ICONS=y
BR2_PACKAGE_KF5_KACTIVITIES=y
diff --git a/buildroot-external/package/growdisk-service/Config.in b/buildroot-external/package/growdisk-service/Config.in
new file mode 100644
index 00000000..d79502f6
--- /dev/null
+++ b/buildroot-external/package/growdisk-service/Config.in
@@ -0,0 +1,6 @@
+config BR2_PACKAGE_GROWDISK_SERVICE
+ bool "growdisk-service"
+ help
+ A systemd service that only runs on file flag
+ to auto expand the filesystem over the full size
+ of the used disk.
diff --git a/buildroot-external/package/growdisk-service/growdisk b/buildroot-external/package/growdisk-service/growdisk
new file mode 100755
index 00000000..4250a1c5
--- /dev/null
+++ b/buildroot-external/package/growdisk-service/growdisk
@@ -0,0 +1,24 @@
+#!/bin/bash
+#
+# Get active block device
+DEVICE_ROOTFS="$(findfs UUID=c0932a41-44cf-463b-8152-d43188553ed4)"
+DEVICE="/dev/$(lsblk -no pkname "${DEVICE_ROOTFS}")"
+
+# Fix GPT header backup file
+sgdisk -e "${DEVICE}" &&
+partprobe "${DEVICE}" &&
+
+# Resize needed?
+UNUSED=$(sfdisk -Fq "${DEVICE}" | cut -d " " -f 3 | tail -1)
+if [ -z "${UNUSED}" ] || [ "${UNUSED}" -le "16384" ]; then
+ echo "[INFO] No resize of rootfs partition needed"
+ exit 0
+else
+ echo "[INFO] Resizing the rootfs partition"
+ parted "${DEVICE}" unit % resizepart 2 100% &&
+ partprobe "${DEVICE}" &&
+ sync &&
+ resize2fs "${DEVICE_ROOTFS}" &&
+ echo "[OK]"
+fi
+
diff --git a/buildroot-external/package/growdisk-service/growdisk-service.mk b/buildroot-external/package/growdisk-service/growdisk-service.mk
new file mode 100644
index 00000000..b1796bb2
--- /dev/null
+++ b/buildroot-external/package/growdisk-service/growdisk-service.mk
@@ -0,0 +1,20 @@
+################################################################################
+#
+# growdisk-service
+#
+################################################################################
+
+GROWDISK_SERVICE_VERSION = 0.1.0
+GROWDISK_SERVICE_SITE = $(BR2_EXTERNAL_OPENVOICEOS_PATH)/package/growdisk-service
+GROWDISK_SERVICE_SITE_METHOD = local
+GROWDISK_SERVICE_LICENSE = Apache License 2.0
+GROWDISK_SERVICE_LICENSE_FILES = LICENSE
+
+define GROWDISK_SERVICE_INSTALL_TARGET_CMDS
+ $(INSTALL) -m 0755 $(@D)/growdisk $(TARGET_DIR)/usr/sbin/
+ $(INSTALL) -D -m 644 $(@D)/growdisk.service \
+ $(TARGET_DIR)/usr/lib/systemd/system/growdisk.service
+ touch $(TARGET_DIR)/etc/growdisk
+endef
+
+$(eval $(generic-package))
diff --git a/buildroot-external/package/growdisk-service/growdisk.service b/buildroot-external/package/growdisk-service/growdisk.service
new file mode 100644
index 00000000..45767c39
--- /dev/null
+++ b/buildroot-external/package/growdisk-service/growdisk.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Growdisk service to auto expand the rootfs partition
+DefaultDependencies=no
+Conflicts=shutdown.target
+After=systemd-remount-fs.service
+Before=sysinit.target shutdown.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/sbin/growdisk
+
+[Install]
+WantedBy=sysinit.target
diff --git a/buildroot-external/rootfs-overlay/usr/lib/repart.d/50-root.conf b/buildroot-external/rootfs-overlay/usr/lib/repart.d/50-root.conf
deleted file mode 100644
index 1aadd2dc..00000000
--- a/buildroot-external/rootfs-overlay/usr/lib/repart.d/50-root.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[Partition]
-Type=root
diff --git a/buildroot-external/rootfs-overlay/usr/lib/systemd/system-preset/10-ovos.preset b/buildroot-external/rootfs-overlay/usr/lib/systemd/system-preset/10-ovos.preset
index cfd143db..47c060c2 100644
--- a/buildroot-external/rootfs-overlay/usr/lib/systemd/system-preset/10-ovos.preset
+++ b/buildroot-external/rootfs-overlay/usr/lib/systemd/system-preset/10-ovos.preset
@@ -1,5 +1,5 @@
-enable systemd-repart.service
enable prepare_system.service
+enable growdisk.service
enable hostname.service
enable sshd.service
enable brcm_bt.service