From 3abb7cb4649a14f5f6d8d127af4a1c2375254a38 Mon Sep 17 00:00:00 2001 From: Harrie Rooijackers Date: Thu, 26 Dec 2019 17:31:32 +0100 Subject: [PATCH] lvm2: Added script and updated Makefile to activate lvm2 at preinit to allow overlays on lvm2 partitions for mount_root Signed-off-by: Harrie Rooijackers --- utils/lvm2/Makefile | 4 +++- utils/lvm2/files/lvm2.preinit | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 utils/lvm2/files/lvm2.preinit diff --git a/utils/lvm2/Makefile b/utils/lvm2/Makefile index 2fa1eda46..7ee2a18ca 100644 --- a/utils/lvm2/Makefile +++ b/utils/lvm2/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=LVM2 PKG_VERSION:=2.03.08 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz PKG_SOURCE_URL:=https://sourceware.org/pub/lvm2 @@ -92,6 +92,8 @@ define Package/lvm2/install $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/lvm/lvmlocal.conf $(1)/etc/lvm/ $(INSTALL_DIR) $(1)/etc/lvm/profile $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/lvm/profile/* $(1)/etc/lvm/profile/ + $(INSTALL_DIR) $(1)/lib/preinit + $(INSTALL_DATA) ./files/lvm2.preinit $(1)/lib/preinit/80_lvm2 $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/lvm2.init $(1)/etc/init.d/lvm2 $(FIND) $(PKG_INSTALL_DIR)/usr/sbin/ -type l -exec $(CP) -a {} $(1)/sbin/ \; diff --git a/utils/lvm2/files/lvm2.preinit b/utils/lvm2/files/lvm2.preinit new file mode 100644 index 000000000..b654e79bf --- /dev/null +++ b/utils/lvm2/files/lvm2.preinit @@ -0,0 +1,25 @@ +#!/bin/sh +# Copyright (C) 2019 Harrie Rooijackers + +# The make proecess copies this file to the /lib/preinit/80_lvm2 +# As a result it is executed just before 80_mount_root and makes lvm +# entities available during the mount_root process that handles any +# overlays. This allows overlays to be lvm2 partitions. + +# Note that /lib/preinit/80_lvm2 needs to be on the initial "lower" +# partition for this to work. + +do_startlvm() { + echo "Starting lvm2 during preinit" > /dev/kmsg + # The following 3 lines are copied from from the start function + # in /etc/rc.d/S15lvm2 which is copyright by Stefan Monnier + mkdir -p /tmp/lvm/cache + /sbin/lvm vgscan --ignorelockingfailure --mknodes > /dev/kmsg || : + /sbin/lvm vgchange -aly --ignorelockingfailure > /dev/kmsg || return 2 +} + +# Perform the function only if lvm2 is enabled by the user +# Not sure if the test is that useful since it tests the existance +# of /etc/rc.d/S15lvm2 on the initial "lower" partition only so +# changes made after the overlay is created are not taken into account +[ -f /etc/rc.d/S15lvm2 ] && boot_hook_add preinit_main do_startlvm