extrahd: use udev rule to mount extrahd partitions

Message ID 20230917115910.4074-1-arne_f@ipfire.org
State Accepted
Commit 7c9f5f9882af2203e0445e1d9044f4df0bc00265
Headers
Series extrahd: use udev rule to mount extrahd partitions |

Commit Message

Arne Fitzenreiter Sept. 17, 2023, 11:58 a.m. UTC
  the previous patches for
https://bugzilla.ipfire.org/show_bug.cgi?id=12863
introduce a new bug that slow devices are not mounted
at boot. So now udev calls the extrahd script with
the uuid.

Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>
---
 config/extrahd/extrahd.pl    | 36 ++++++++++++++++++++++++++++--------
 config/rootfiles/common/udev |  1 +
 config/udev/61-extrahd.rules |  1 +
 lfs/udev                     |  4 ++++
 4 files changed, 34 insertions(+), 8 deletions(-)
 create mode 100644 config/udev/61-extrahd.rules
  

Comments

jon Sept. 27, 2023, 7:09 p.m. UTC | #1
Arne,

Can you double check the `udev 61-extrahd.rules` file?

> +ACTION=="add", SUBSYSTEM=="block", RUN+="/var/ipfire/extrahd/bin/extrahd.pl udev-event"

I think it is missing the argument `mount`

RUN+="/var/ipfire/extrahd/bin/extrahd.pl mount udev-event"


Best regards,
Jon


> On Sep 17, 2023, at 6:58 AM, Arne Fitzenreiter <arne_f@ipfire.org> wrote:
> 
> the previous patches for
> https://bugzilla.ipfire.org/show_bug.cgi?id=12863
> introduce a new bug that slow devices are not mounted
> at boot. So now udev calls the extrahd script with
> the uuid.
> 
> Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>
> ---
> config/extrahd/extrahd.pl    | 36 ++++++++++++++++++++++++++++--------
> config/rootfiles/common/udev |  1 +
> config/udev/61-extrahd.rules |  1 +
> lfs/udev                     |  4 ++++
> 4 files changed, 34 insertions(+), 8 deletions(-)
> create mode 100644 config/udev/61-extrahd.rules
> 
> diff --git a/config/extrahd/extrahd.pl b/config/extrahd/extrahd.pl
> index 145a2a43a..cc85228d5 100644
> --- a/config/extrahd/extrahd.pl
> +++ b/config/extrahd/extrahd.pl
> @@ -35,10 +35,20 @@ extrahd_mount() {
> 	local failed=0
> 
> 	while IFS=';' read -r device filesystem mountpoint rest; do
> -		# Filter by mountpoint if set
> -		if [ -n "${_mountpoint}" ] && [ "${mountpoint}" != "${_mountpoint}" ]; then
> -			continue
> -		fi
> +		# Filter by UUID or mountpoint
> +		case "${_mountpoint}" in
> +			UUID=*)
> +				if [ "${device}" != "${_mountpoint}" ]; then
> +					continue
> +				fi
> +				;;
> +
> +			/*)
> +				if [ -n "${_mountpoint}" ] && [ "${mountpoint}" != "${_mountpoint}" ]; then
> +					continue
> +				fi
> +				;;
> +		esac
> 
> 		# Check that the mountpoint starts with a slash
> 		if [ "${mountpoint:0:1}" != "/" ]; then
> @@ -75,10 +85,20 @@ extrahd_umount() {
> 	local failed=0
> 
> 	while IFS=';' read -r device filesystem mountpoint rest; do
> -		# Filter by mountpoint if set
> -		if [ -n "${_mountpoint}" ] && [ "${mountpoint}" != "${_mountpoint}" ]; then
> -			continue
> -		fi
> +		# Filter by UUID or mountpoint
> +		case "${_mountpoint}" in
> +			UUID=*)
> +				if [ "${device}" != "${_mountpoint}" ]; then
> +					continue
> +				fi
> +				;;
> +
> +			/*)
> +				if [ -n "${_mountpoint}" ] && [ "${mountpoint}" != "${_mountpoint}" ]; then
> +					continue
> +				fi
> +				;;
> +		esac
> 
> 		# Do not try to umount if nothing is mounted
> 		if ! mountpoint "${mountpoint}" &>/dev/null; then
> diff --git a/config/rootfiles/common/udev b/config/rootfiles/common/udev
> index e5c9bd01f..876ae0c5a 100644
> --- a/config/rootfiles/common/udev
> +++ b/config/rootfiles/common/udev
> @@ -70,6 +70,7 @@ lib/udev/rules.d/60-persistent-storage.rules
> lib/udev/rules.d/60-persistent-v4l.rules
> lib/udev/rules.d/60-sensor.rules
> lib/udev/rules.d/60-serial.rules
> +lib/udev/rules.d/61-extrahd.rules
> lib/udev/rules.d/64-btrfs.rules
> lib/udev/rules.d/70-camera.rules
> lib/udev/rules.d/70-joystick.rules
> diff --git a/config/udev/61-extrahd.rules b/config/udev/61-extrahd.rules
> new file mode 100644
> index 000000000..114f2d665
> --- /dev/null
> +++ b/config/udev/61-extrahd.rules
> @@ -0,0 +1 @@
> +ACTION=="add", SUBSYSTEM=="block", RUN+="/var/ipfire/extrahd/bin/extrahd.pl udev-event"
> diff --git a/lfs/udev b/lfs/udev
> index eb01ae848..703d98b86 100644
> --- a/lfs/udev
> +++ b/lfs/udev
> @@ -122,6 +122,10 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
> 	install -v -m 644 $(DIR_SRC)/config/udev/60-net.rules \
> 		/lib/udev/rules.d
> 
> +	# Install ExtraHD rules
> +	install -v -m 644 $(DIR_SRC)/config/udev/61-extrahd.rules \
> +		/lib/udev/rules.d
> +
> 	# Install AQM rules
> 	install -v -m 644 $(DIR_SRC)/config/udev/99-aqm.rules \
> 		/lib/udev/rules.d
> -- 
> 2.42.0
>
  

Patch

diff --git a/config/extrahd/extrahd.pl b/config/extrahd/extrahd.pl
index 145a2a43a..cc85228d5 100644
--- a/config/extrahd/extrahd.pl
+++ b/config/extrahd/extrahd.pl
@@ -35,10 +35,20 @@  extrahd_mount() {
 	local failed=0
 
 	while IFS=';' read -r device filesystem mountpoint rest; do
-		# Filter by mountpoint if set
-		if [ -n "${_mountpoint}" ] && [ "${mountpoint}" != "${_mountpoint}" ]; then
-			continue
-		fi
+		# Filter by UUID or mountpoint
+		case "${_mountpoint}" in
+			UUID=*)
+				if [ "${device}" != "${_mountpoint}" ]; then
+					continue
+				fi
+				;;
+
+			/*)
+				if [ -n "${_mountpoint}" ] && [ "${mountpoint}" != "${_mountpoint}" ]; then
+					continue
+				fi
+				;;
+		esac
 
 		# Check that the mountpoint starts with a slash
 		if [ "${mountpoint:0:1}" != "/" ]; then
@@ -75,10 +85,20 @@  extrahd_umount() {
 	local failed=0
 
 	while IFS=';' read -r device filesystem mountpoint rest; do
-		# Filter by mountpoint if set
-		if [ -n "${_mountpoint}" ] && [ "${mountpoint}" != "${_mountpoint}" ]; then
-			continue
-		fi
+		# Filter by UUID or mountpoint
+		case "${_mountpoint}" in
+			UUID=*)
+				if [ "${device}" != "${_mountpoint}" ]; then
+					continue
+				fi
+				;;
+
+			/*)
+				if [ -n "${_mountpoint}" ] && [ "${mountpoint}" != "${_mountpoint}" ]; then
+					continue
+				fi
+				;;
+		esac
 
 		# Do not try to umount if nothing is mounted
 		if ! mountpoint "${mountpoint}" &>/dev/null; then
diff --git a/config/rootfiles/common/udev b/config/rootfiles/common/udev
index e5c9bd01f..876ae0c5a 100644
--- a/config/rootfiles/common/udev
+++ b/config/rootfiles/common/udev
@@ -70,6 +70,7 @@  lib/udev/rules.d/60-persistent-storage.rules
 lib/udev/rules.d/60-persistent-v4l.rules
 lib/udev/rules.d/60-sensor.rules
 lib/udev/rules.d/60-serial.rules
+lib/udev/rules.d/61-extrahd.rules
 lib/udev/rules.d/64-btrfs.rules
 lib/udev/rules.d/70-camera.rules
 lib/udev/rules.d/70-joystick.rules
diff --git a/config/udev/61-extrahd.rules b/config/udev/61-extrahd.rules
new file mode 100644
index 000000000..114f2d665
--- /dev/null
+++ b/config/udev/61-extrahd.rules
@@ -0,0 +1 @@ 
+ACTION=="add", SUBSYSTEM=="block", RUN+="/var/ipfire/extrahd/bin/extrahd.pl udev-event"
diff --git a/lfs/udev b/lfs/udev
index eb01ae848..703d98b86 100644
--- a/lfs/udev
+++ b/lfs/udev
@@ -122,6 +122,10 @@  $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	install -v -m 644 $(DIR_SRC)/config/udev/60-net.rules \
 		/lib/udev/rules.d
 
+	# Install ExtraHD rules
+	install -v -m 644 $(DIR_SRC)/config/udev/61-extrahd.rules \
+		/lib/udev/rules.d
+
 	# Install AQM rules
 	install -v -m 644 $(DIR_SRC)/config/udev/99-aqm.rules \
 		/lib/udev/rules.d