All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] udev-extraconf: Add systemd-mount to udev-extraconf/mount.sh
@ 2018-04-17  7:03 Hongzhi.Song
  2018-04-20  7:45 ` Hongzhi, Song
  2018-04-23  3:37 ` Hongzhi, Song
  0 siblings, 2 replies; 8+ messages in thread
From: Hongzhi.Song @ 2018-04-17  7:03 UTC (permalink / raw)
  To: openembedded-core

Udev-extraconf works correctly with sysvinit in the aspect of automounting
block devices. But it has a serious problem in case of systemd. Block devices
automounted by udev is unaccessible to host space(out of udevd's private
namespace). For example, we cannot format those block devices.

e.g.
    root@qemux86:~# mkfs.ext4 /dev/sda1
    mke2fs 1.43.8 (1-Jan-2018)
    /dev/sda1 contains a ext4 file system
    last mounted on Tue Apr  3 06:22:41 2018
    Proceed anyway? (y,N) y
    /dev/sda1 is apparently in use by the system; will not make a filesystem here!

Other distributions has no such problem, because they use a series of rules to
manager block devices. Different types of block devices match different rules.
But udev-extraconf just use one rule, automount.rules, which results in this
problem.

The 'systemd-mount' command is recommended by the systemd community to solve such
problems.

This patch makes use of 'systemd-mount' to solve the above problem.

[YOCTO #12644]

Signed-off-by: Hongzhi.Song <hongzhi.song@windriver.com>
---
 meta/recipes-core/udev/udev-extraconf/mount.sh | 83 ++++++++++++++++++++------
 meta/recipes-core/udev/udev-extraconf_1.1.bb   |  3 +
 2 files changed, 69 insertions(+), 17 deletions(-)

diff --git a/meta/recipes-core/udev/udev-extraconf/mount.sh b/meta/recipes-core/udev/udev-extraconf/mount.sh
index d760328..067d4e2 100644
--- a/meta/recipes-core/udev/udev-extraconf/mount.sh
+++ b/meta/recipes-core/udev/udev-extraconf/mount.sh
@@ -4,10 +4,28 @@
 #
 # Attempt to mount any added block devices and umount any removed devices
 
+BASE_INIT="`readlink "@base_sbindir@/init"`"
+INIT_SYSTEMD="@systemd_unitdir@/systemd"
+
+if [ "x$BASE_INIT" = "x$INIT_SYSTEMD" ];then
+    # systemd as init uses systemd-mount to mount block devices
+    MOUNT="/usr/bin/systemd-mount"
+    UMOUNT="/usr/bin/systemd-umount"
+
+    if [ -x $MOUNT ] && [ -x $UMOUNT ];
+    then
+        logger "Using systemd-mount to finish mount"
+    else
+        logger "Linux init is using systemd, so please install systemd-mount to finish mount"
+        exit 1
+    fi
+else
+    MOUNT="/bin/mount"
+    UMOUNT="/bin/umount"
+fi
 
-MOUNT="/bin/mount"
 PMOUNT="/usr/bin/pmount"
-UMOUNT="/bin/umount"
+
 for line in `grep -h -v ^# /etc/udev/mount.blacklist /etc/udev/mount.blacklist.d/*`
 do
 	if [ ` expr match "$DEVNAME" "$line" ` -gt 0 ];
@@ -17,7 +35,35 @@ do
 	fi
 done
 
-automount() {	
+automount_systemd() {
+    name="`basename "$DEVNAME"`"
+
+    [ -d "/run/media/$name" ] || mkdir -p "/run/media/$name"
+
+    MOUNT="$MOUNT -o silent"
+
+    # If filesystemtype is vfat, change the ownership group to 'disk', and
+    # grant it with  w/r/x permissions.
+    case $ID_FS_TYPE in
+    vfat|fat)
+        MOUNT="$MOUNT -o umask=007,gid=`awk -F':' '/^disk/{print $3}' /etc/group`"
+        ;;
+    # TODO
+    *)
+        ;;
+    esac
+
+    if ! $MOUNT --no-block -t auto $DEVNAME "/run/media/$name"
+    then
+        #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/run/media/$name\" failed!"
+        rm_dir "/run/media/$name"
+    else
+        logger "mount.sh/automount" "Auto-mount of [/run/media/$name] successful"
+        touch "/tmp/.automount-$name"
+    fi
+}
+
+automount() {
 	name="`basename "$DEVNAME"`"
 
 	! test -d "/run/media/$name" && mkdir -p "/run/media/$name"
@@ -26,7 +72,7 @@ automount() {
 	then
 		MOUNT="$MOUNT -o silent"
 	fi
-	
+
 	# If filesystem type is vfat, change the ownership group to 'disk', and
 	# grant it with  w/r/x permissions.
 	case $ID_FS_TYPE in
@@ -68,23 +114,26 @@ if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ] && [ -n "$ID_FS_TYPE" -o "$media_t
 	elif [ -x $MOUNT ]; then
     		$MOUNT $DEVNAME 2> /dev/null
 	fi
-	
+
 	# If the device isn't mounted at this point, it isn't
 	# configured in fstab (note the root filesystem can show up as
 	# /dev/root in /proc/mounts, so check the device number too)
-	if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
-		grep -q "^$DEVNAME " /proc/mounts || automount
-	fi
+    if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
+        if [ "`basename $MOUNT`" = "systemd-mount" ];then
+            grep -q "^$DEVNAME " /proc/mounts || automount_systemd
+        else
+            grep -q "^$DEVNAME " /proc/mounts || automount
+        fi
+    fi
 fi
 
-
 if [ "$ACTION" = "remove" ] || [ "$ACTION" = "change" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
-	for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
-	do
-		$UMOUNT $mnt
-	done
-	
-	# Remove empty directories from auto-mounter
-	name="`basename "$DEVNAME"`"
-	test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
+    for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
+    do
+        $UMOUNT $mnt
+    done
+
+    # Remove empty directories from auto-mounter
+    name="`basename "$DEVNAME"`"
+    test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
 fi
diff --git a/meta/recipes-core/udev/udev-extraconf_1.1.bb b/meta/recipes-core/udev/udev-extraconf_1.1.bb
index 43a1cff..90f933d 100644
--- a/meta/recipes-core/udev/udev-extraconf_1.1.bb
+++ b/meta/recipes-core/udev/udev-extraconf_1.1.bb
@@ -29,6 +29,9 @@ do_install() {
     install -d ${D}${sysconfdir}/udev/scripts/
 
     install -m 0755 ${WORKDIR}/mount.sh ${D}${sysconfdir}/udev/scripts/mount.sh
+    sed -i 's|@systemd_unitdir@|${systemd_unitdir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
+    sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
+
     install -m 0755 ${WORKDIR}/network.sh ${D}${sysconfdir}/udev/scripts
 }
 
-- 
2.8.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] udev-extraconf: Add systemd-mount to udev-extraconf/mount.sh
  2018-04-17  7:03 [PATCH v3] udev-extraconf: Add systemd-mount to udev-extraconf/mount.sh Hongzhi.Song
@ 2018-04-20  7:45 ` Hongzhi, Song
  2018-04-23  3:37 ` Hongzhi, Song
  1 sibling, 0 replies; 8+ messages in thread
From: Hongzhi, Song @ 2018-04-20  7:45 UTC (permalink / raw)
  To: openembedded-core

ping ..

// Hongzhi


On 2018年04月17日 15:03, Hongzhi.Song wrote:
> Udev-extraconf works correctly with sysvinit in the aspect of automounting
> block devices. But it has a serious problem in case of systemd. Block devices
> automounted by udev is unaccessible to host space(out of udevd's private
> namespace). For example, we cannot format those block devices.
>
> e.g.
>      root@qemux86:~# mkfs.ext4 /dev/sda1
>      mke2fs 1.43.8 (1-Jan-2018)
>      /dev/sda1 contains a ext4 file system
>      last mounted on Tue Apr  3 06:22:41 2018
>      Proceed anyway? (y,N) y
>      /dev/sda1 is apparently in use by the system; will not make a filesystem here!
>
> Other distributions has no such problem, because they use a series of rules to
> manager block devices. Different types of block devices match different rules.
> But udev-extraconf just use one rule, automount.rules, which results in this
> problem.
>
> The 'systemd-mount' command is recommended by the systemd community to solve such
> problems.
>
> This patch makes use of 'systemd-mount' to solve the above problem.
>
> [YOCTO #12644]
>
> Signed-off-by: Hongzhi.Song <hongzhi.song@windriver.com>
> ---
>   meta/recipes-core/udev/udev-extraconf/mount.sh | 83 ++++++++++++++++++++------
>   meta/recipes-core/udev/udev-extraconf_1.1.bb   |  3 +
>   2 files changed, 69 insertions(+), 17 deletions(-)
>
> diff --git a/meta/recipes-core/udev/udev-extraconf/mount.sh b/meta/recipes-core/udev/udev-extraconf/mount.sh
> index d760328..067d4e2 100644
> --- a/meta/recipes-core/udev/udev-extraconf/mount.sh
> +++ b/meta/recipes-core/udev/udev-extraconf/mount.sh
> @@ -4,10 +4,28 @@
>   #
>   # Attempt to mount any added block devices and umount any removed devices
>   
> +BASE_INIT="`readlink "@base_sbindir@/init"`"
> +INIT_SYSTEMD="@systemd_unitdir@/systemd"
> +
> +if [ "x$BASE_INIT" = "x$INIT_SYSTEMD" ];then
> +    # systemd as init uses systemd-mount to mount block devices
> +    MOUNT="/usr/bin/systemd-mount"
> +    UMOUNT="/usr/bin/systemd-umount"
> +
> +    if [ -x $MOUNT ] && [ -x $UMOUNT ];
> +    then
> +        logger "Using systemd-mount to finish mount"
> +    else
> +        logger "Linux init is using systemd, so please install systemd-mount to finish mount"
> +        exit 1
> +    fi
> +else
> +    MOUNT="/bin/mount"
> +    UMOUNT="/bin/umount"
> +fi
>   
> -MOUNT="/bin/mount"
>   PMOUNT="/usr/bin/pmount"
> -UMOUNT="/bin/umount"
> +
>   for line in `grep -h -v ^# /etc/udev/mount.blacklist /etc/udev/mount.blacklist.d/*`
>   do
>   	if [ ` expr match "$DEVNAME" "$line" ` -gt 0 ];
> @@ -17,7 +35,35 @@ do
>   	fi
>   done
>   
> -automount() {	
> +automount_systemd() {
> +    name="`basename "$DEVNAME"`"
> +
> +    [ -d "/run/media/$name" ] || mkdir -p "/run/media/$name"
> +
> +    MOUNT="$MOUNT -o silent"
> +
> +    # If filesystemtype is vfat, change the ownership group to 'disk', and
> +    # grant it with  w/r/x permissions.
> +    case $ID_FS_TYPE in
> +    vfat|fat)
> +        MOUNT="$MOUNT -o umask=007,gid=`awk -F':' '/^disk/{print $3}' /etc/group`"
> +        ;;
> +    # TODO
> +    *)
> +        ;;
> +    esac
> +
> +    if ! $MOUNT --no-block -t auto $DEVNAME "/run/media/$name"
> +    then
> +        #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/run/media/$name\" failed!"
> +        rm_dir "/run/media/$name"
> +    else
> +        logger "mount.sh/automount" "Auto-mount of [/run/media/$name] successful"
> +        touch "/tmp/.automount-$name"
> +    fi
> +}
> +
> +automount() {
>   	name="`basename "$DEVNAME"`"
>   
>   	! test -d "/run/media/$name" && mkdir -p "/run/media/$name"
> @@ -26,7 +72,7 @@ automount() {
>   	then
>   		MOUNT="$MOUNT -o silent"
>   	fi
> -	
> +
>   	# If filesystem type is vfat, change the ownership group to 'disk', and
>   	# grant it with  w/r/x permissions.
>   	case $ID_FS_TYPE in
> @@ -68,23 +114,26 @@ if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ] && [ -n "$ID_FS_TYPE" -o "$media_t
>   	elif [ -x $MOUNT ]; then
>       		$MOUNT $DEVNAME 2> /dev/null
>   	fi
> -	
> +
>   	# If the device isn't mounted at this point, it isn't
>   	# configured in fstab (note the root filesystem can show up as
>   	# /dev/root in /proc/mounts, so check the device number too)
> -	if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
> -		grep -q "^$DEVNAME " /proc/mounts || automount
> -	fi
> +    if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
> +        if [ "`basename $MOUNT`" = "systemd-mount" ];then
> +            grep -q "^$DEVNAME " /proc/mounts || automount_systemd
> +        else
> +            grep -q "^$DEVNAME " /proc/mounts || automount
> +        fi
> +    fi
>   fi
>   
> -
>   if [ "$ACTION" = "remove" ] || [ "$ACTION" = "change" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
> -	for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
> -	do
> -		$UMOUNT $mnt
> -	done
> -	
> -	# Remove empty directories from auto-mounter
> -	name="`basename "$DEVNAME"`"
> -	test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
> +    for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
> +    do
> +        $UMOUNT $mnt
> +    done
> +
> +    # Remove empty directories from auto-mounter
> +    name="`basename "$DEVNAME"`"
> +    test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
>   fi
> diff --git a/meta/recipes-core/udev/udev-extraconf_1.1.bb b/meta/recipes-core/udev/udev-extraconf_1.1.bb
> index 43a1cff..90f933d 100644
> --- a/meta/recipes-core/udev/udev-extraconf_1.1.bb
> +++ b/meta/recipes-core/udev/udev-extraconf_1.1.bb
> @@ -29,6 +29,9 @@ do_install() {
>       install -d ${D}${sysconfdir}/udev/scripts/
>   
>       install -m 0755 ${WORKDIR}/mount.sh ${D}${sysconfdir}/udev/scripts/mount.sh
> +    sed -i 's|@systemd_unitdir@|${systemd_unitdir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
> +    sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
> +
>       install -m 0755 ${WORKDIR}/network.sh ${D}${sysconfdir}/udev/scripts
>   }
>   



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] udev-extraconf: Add systemd-mount to udev-extraconf/mount.sh
  2018-04-17  7:03 [PATCH v3] udev-extraconf: Add systemd-mount to udev-extraconf/mount.sh Hongzhi.Song
  2018-04-20  7:45 ` Hongzhi, Song
@ 2018-04-23  3:37 ` Hongzhi, Song
  2018-04-23 20:20   ` Randy MacLeod
  1 sibling, 1 reply; 8+ messages in thread
From: Hongzhi, Song @ 2018-04-23  3:37 UTC (permalink / raw)
  To: openembedded-core

ping

// Hongzhi


On 2018年04月17日 15:03, Hongzhi.Song wrote:
> Udev-extraconf works correctly with sysvinit in the aspect of automounting
> block devices. But it has a serious problem in case of systemd. Block devices
> automounted by udev is unaccessible to host space(out of udevd's private
> namespace). For example, we cannot format those block devices.
>
> e.g.
>      root@qemux86:~# mkfs.ext4 /dev/sda1
>      mke2fs 1.43.8 (1-Jan-2018)
>      /dev/sda1 contains a ext4 file system
>      last mounted on Tue Apr  3 06:22:41 2018
>      Proceed anyway? (y,N) y
>      /dev/sda1 is apparently in use by the system; will not make a filesystem here!
>
> Other distributions has no such problem, because they use a series of rules to
> manager block devices. Different types of block devices match different rules.
> But udev-extraconf just use one rule, automount.rules, which results in this
> problem.
>
> The 'systemd-mount' command is recommended by the systemd community to solve such
> problems.
>
> This patch makes use of 'systemd-mount' to solve the above problem.
>
> [YOCTO #12644]
>
> Signed-off-by: Hongzhi.Song <hongzhi.song@windriver.com>
> ---
>   meta/recipes-core/udev/udev-extraconf/mount.sh | 83 ++++++++++++++++++++------
>   meta/recipes-core/udev/udev-extraconf_1.1.bb   |  3 +
>   2 files changed, 69 insertions(+), 17 deletions(-)
>
> diff --git a/meta/recipes-core/udev/udev-extraconf/mount.sh b/meta/recipes-core/udev/udev-extraconf/mount.sh
> index d760328..067d4e2 100644
> --- a/meta/recipes-core/udev/udev-extraconf/mount.sh
> +++ b/meta/recipes-core/udev/udev-extraconf/mount.sh
> @@ -4,10 +4,28 @@
>   #
>   # Attempt to mount any added block devices and umount any removed devices
>   
> +BASE_INIT="`readlink "@base_sbindir@/init"`"
> +INIT_SYSTEMD="@systemd_unitdir@/systemd"
> +
> +if [ "x$BASE_INIT" = "x$INIT_SYSTEMD" ];then
> +    # systemd as init uses systemd-mount to mount block devices
> +    MOUNT="/usr/bin/systemd-mount"
> +    UMOUNT="/usr/bin/systemd-umount"
> +
> +    if [ -x $MOUNT ] && [ -x $UMOUNT ];
> +    then
> +        logger "Using systemd-mount to finish mount"
> +    else
> +        logger "Linux init is using systemd, so please install systemd-mount to finish mount"
> +        exit 1
> +    fi
> +else
> +    MOUNT="/bin/mount"
> +    UMOUNT="/bin/umount"
> +fi
>   
> -MOUNT="/bin/mount"
>   PMOUNT="/usr/bin/pmount"
> -UMOUNT="/bin/umount"
> +
>   for line in `grep -h -v ^# /etc/udev/mount.blacklist /etc/udev/mount.blacklist.d/*`
>   do
>   	if [ ` expr match "$DEVNAME" "$line" ` -gt 0 ];
> @@ -17,7 +35,35 @@ do
>   	fi
>   done
>   
> -automount() {	
> +automount_systemd() {
> +    name="`basename "$DEVNAME"`"
> +
> +    [ -d "/run/media/$name" ] || mkdir -p "/run/media/$name"
> +
> +    MOUNT="$MOUNT -o silent"
> +
> +    # If filesystemtype is vfat, change the ownership group to 'disk', and
> +    # grant it with  w/r/x permissions.
> +    case $ID_FS_TYPE in
> +    vfat|fat)
> +        MOUNT="$MOUNT -o umask=007,gid=`awk -F':' '/^disk/{print $3}' /etc/group`"
> +        ;;
> +    # TODO
> +    *)
> +        ;;
> +    esac
> +
> +    if ! $MOUNT --no-block -t auto $DEVNAME "/run/media/$name"
> +    then
> +        #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME \"/run/media/$name\" failed!"
> +        rm_dir "/run/media/$name"
> +    else
> +        logger "mount.sh/automount" "Auto-mount of [/run/media/$name] successful"
> +        touch "/tmp/.automount-$name"
> +    fi
> +}
> +
> +automount() {
>   	name="`basename "$DEVNAME"`"
>   
>   	! test -d "/run/media/$name" && mkdir -p "/run/media/$name"
> @@ -26,7 +72,7 @@ automount() {
>   	then
>   		MOUNT="$MOUNT -o silent"
>   	fi
> -	
> +
>   	# If filesystem type is vfat, change the ownership group to 'disk', and
>   	# grant it with  w/r/x permissions.
>   	case $ID_FS_TYPE in
> @@ -68,23 +114,26 @@ if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ] && [ -n "$ID_FS_TYPE" -o "$media_t
>   	elif [ -x $MOUNT ]; then
>       		$MOUNT $DEVNAME 2> /dev/null
>   	fi
> -	
> +
>   	# If the device isn't mounted at this point, it isn't
>   	# configured in fstab (note the root filesystem can show up as
>   	# /dev/root in /proc/mounts, so check the device number too)
> -	if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
> -		grep -q "^$DEVNAME " /proc/mounts || automount
> -	fi
> +    if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
> +        if [ "`basename $MOUNT`" = "systemd-mount" ];then
> +            grep -q "^$DEVNAME " /proc/mounts || automount_systemd
> +        else
> +            grep -q "^$DEVNAME " /proc/mounts || automount
> +        fi
> +    fi
>   fi
>   
> -
>   if [ "$ACTION" = "remove" ] || [ "$ACTION" = "change" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
> -	for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
> -	do
> -		$UMOUNT $mnt
> -	done
> -	
> -	# Remove empty directories from auto-mounter
> -	name="`basename "$DEVNAME"`"
> -	test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
> +    for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
> +    do
> +        $UMOUNT $mnt
> +    done
> +
> +    # Remove empty directories from auto-mounter
> +    name="`basename "$DEVNAME"`"
> +    test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
>   fi
> diff --git a/meta/recipes-core/udev/udev-extraconf_1.1.bb b/meta/recipes-core/udev/udev-extraconf_1.1.bb
> index 43a1cff..90f933d 100644
> --- a/meta/recipes-core/udev/udev-extraconf_1.1.bb
> +++ b/meta/recipes-core/udev/udev-extraconf_1.1.bb
> @@ -29,6 +29,9 @@ do_install() {
>       install -d ${D}${sysconfdir}/udev/scripts/
>   
>       install -m 0755 ${WORKDIR}/mount.sh ${D}${sysconfdir}/udev/scripts/mount.sh
> +    sed -i 's|@systemd_unitdir@|${systemd_unitdir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
> +    sed -i 's|@base_sbindir@|${base_sbindir}|g' ${D}${sysconfdir}/udev/scripts/mount.sh
> +
>       install -m 0755 ${WORKDIR}/network.sh ${D}${sysconfdir}/udev/scripts
>   }
>   



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] udev-extraconf: Add systemd-mount to udev-extraconf/mount.sh
  2018-04-23  3:37 ` Hongzhi, Song
@ 2018-04-23 20:20   ` Randy MacLeod
  2018-07-03  3:40     ` Hongzhi, Song
  0 siblings, 1 reply; 8+ messages in thread
From: Randy MacLeod @ 2018-04-23 20:20 UTC (permalink / raw)
  To: Hongzhi, Song, Patches and discussions about the oe-core layer

On 2018-04-22 11:37 PM, Hongzhi, Song wrote:
> ping

Please be patient.

0e-core-2.5 rc1 is being tested now and only critical blocking fixes are 
being accepted.

Once the results of 2.5 tests are good, then commits such as this one
can be added to the master[-next] branch and then later cherry-picked 
back to 2.5.1
if needed.

Give people a few days (or more if things don't go well) to get 2.5 out 
the door.

../Randy

>
> // Hongzhi
>
>
> On 2018年04月17日 15:03, Hongzhi.Song wrote:
>> Udev-extraconf works correctly with sysvinit in the aspect of 
>> automounting
>> block devices. But it has a serious problem in case of systemd. Block 
>> devices
>> automounted by udev is unaccessible to host space(out of udevd's private
>> namespace). For example, we cannot format those block devices.
>>
>> e.g.
>>      root@qemux86:~# mkfs.ext4 /dev/sda1
>>      mke2fs 1.43.8 (1-Jan-2018)
>>      /dev/sda1 contains a ext4 file system
>>      last mounted on Tue Apr  3 06:22:41 2018
>>      Proceed anyway? (y,N) y
>>      /dev/sda1 is apparently in use by the system; will not make a 
>> filesystem here!
>>
>> Other distributions has no such problem, because they use a series of 
>> rules to
>> manager block devices. Different types of block devices match 
>> different rules.
>> But udev-extraconf just use one rule, automount.rules, which results 
>> in this
>> problem.
>>
>> The 'systemd-mount' command is recommended by the systemd community 
>> to solve such
>> problems.
>>
>> This patch makes use of 'systemd-mount' to solve the above problem.
>>
>> [YOCTO #12644]
>>
>> Signed-off-by: Hongzhi.Song <hongzhi.song@windriver.com>
>> ---
>>   meta/recipes-core/udev/udev-extraconf/mount.sh | 83 
>> ++++++++++++++++++++------
>>   meta/recipes-core/udev/udev-extraconf_1.1.bb   |  3 +
>>   2 files changed, 69 insertions(+), 17 deletions(-)
>>
>> diff --git a/meta/recipes-core/udev/udev-extraconf/mount.sh 
>> b/meta/recipes-core/udev/udev-extraconf/mount.sh
>> index d760328..067d4e2 100644
>> --- a/meta/recipes-core/udev/udev-extraconf/mount.sh
>> +++ b/meta/recipes-core/udev/udev-extraconf/mount.sh
>> @@ -4,10 +4,28 @@
>>   #
>>   # Attempt to mount any added block devices and umount any removed 
>> devices
>>   +BASE_INIT="`readlink "@base_sbindir@/init"`"
>> +INIT_SYSTEMD="@systemd_unitdir@/systemd"
>> +
>> +if [ "x$BASE_INIT" = "x$INIT_SYSTEMD" ];then
>> +    # systemd as init uses systemd-mount to mount block devices
>> +    MOUNT="/usr/bin/systemd-mount"
>> +    UMOUNT="/usr/bin/systemd-umount"
>> +
>> +    if [ -x $MOUNT ] && [ -x $UMOUNT ];
>> +    then
>> +        logger "Using systemd-mount to finish mount"
>> +    else
>> +        logger "Linux init is using systemd, so please install 
>> systemd-mount to finish mount"
>> +        exit 1
>> +    fi
>> +else
>> +    MOUNT="/bin/mount"
>> +    UMOUNT="/bin/umount"
>> +fi
>>   -MOUNT="/bin/mount"
>>   PMOUNT="/usr/bin/pmount"
>> -UMOUNT="/bin/umount"
>> +
>>   for line in `grep -h -v ^# /etc/udev/mount.blacklist 
>> /etc/udev/mount.blacklist.d/*`
>>   do
>>       if [ ` expr match "$DEVNAME" "$line" ` -gt 0 ];
>> @@ -17,7 +35,35 @@ do
>>       fi
>>   done
>>   -automount() {
>> +automount_systemd() {
>> +    name="`basename "$DEVNAME"`"
>> +
>> +    [ -d "/run/media/$name" ] || mkdir -p "/run/media/$name"
>> +
>> +    MOUNT="$MOUNT -o silent"
>> +
>> +    # If filesystemtype is vfat, change the ownership group to 
>> 'disk', and
>> +    # grant it with  w/r/x permissions.
>> +    case $ID_FS_TYPE in
>> +    vfat|fat)
>> +        MOUNT="$MOUNT -o umask=007,gid=`awk -F':' '/^disk/{print 
>> $3}' /etc/group`"
>> +        ;;
>> +    # TODO
>> +    *)
>> +        ;;
>> +    esac
>> +
>> +    if ! $MOUNT --no-block -t auto $DEVNAME "/run/media/$name"
>> +    then
>> +        #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME 
>> \"/run/media/$name\" failed!"
>> +        rm_dir "/run/media/$name"
>> +    else
>> +        logger "mount.sh/automount" "Auto-mount of 
>> [/run/media/$name] successful"
>> +        touch "/tmp/.automount-$name"
>> +    fi
>> +}
>> +
>> +automount() {
>>       name="`basename "$DEVNAME"`"
>>         ! test -d "/run/media/$name" && mkdir -p "/run/media/$name"
>> @@ -26,7 +72,7 @@ automount() {
>>       then
>>           MOUNT="$MOUNT -o silent"
>>       fi
>> -
>> +
>>       # If filesystem type is vfat, change the ownership group to 
>> 'disk', and
>>       # grant it with  w/r/x permissions.
>>       case $ID_FS_TYPE in
>> @@ -68,23 +114,26 @@ if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ] && 
>> [ -n "$ID_FS_TYPE" -o "$media_t
>>       elif [ -x $MOUNT ]; then
>>               $MOUNT $DEVNAME 2> /dev/null
>>       fi
>> -
>> +
>>       # If the device isn't mounted at this point, it isn't
>>       # configured in fstab (note the root filesystem can show up as
>>       # /dev/root in /proc/mounts, so check the device number too)
>> -    if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
>> -        grep -q "^$DEVNAME " /proc/mounts || automount
>> -    fi
>> +    if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
>> +        if [ "`basename $MOUNT`" = "systemd-mount" ];then
>> +            grep -q "^$DEVNAME " /proc/mounts || automount_systemd
>> +        else
>> +            grep -q "^$DEVNAME " /proc/mounts || automount
>> +        fi
>> +    fi
>>   fi
>>   -
>>   if [ "$ACTION" = "remove" ] || [ "$ACTION" = "change" ] && [ -x 
>> "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
>> -    for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
>> -    do
>> -        $UMOUNT $mnt
>> -    done
>> -
>> -    # Remove empty directories from auto-mounter
>> -    name="`basename "$DEVNAME"`"
>> -    test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
>> +    for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
>> +    do
>> +        $UMOUNT $mnt
>> +    done
>> +
>> +    # Remove empty directories from auto-mounter
>> +    name="`basename "$DEVNAME"`"
>> +    test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
>>   fi
>> diff --git a/meta/recipes-core/udev/udev-extraconf_1.1.bb 
>> b/meta/recipes-core/udev/udev-extraconf_1.1.bb
>> index 43a1cff..90f933d 100644
>> --- a/meta/recipes-core/udev/udev-extraconf_1.1.bb
>> +++ b/meta/recipes-core/udev/udev-extraconf_1.1.bb
>> @@ -29,6 +29,9 @@ do_install() {
>>       install -d ${D}${sysconfdir}/udev/scripts/
>>         install -m 0755 ${WORKDIR}/mount.sh 
>> ${D}${sysconfdir}/udev/scripts/mount.sh
>> +    sed -i 's|@systemd_unitdir@|${systemd_unitdir}|g' 
>> ${D}${sysconfdir}/udev/scripts/mount.sh
>> +    sed -i 's|@base_sbindir@|${base_sbindir}|g' 
>> ${D}${sysconfdir}/udev/scripts/mount.sh
>> +
>>       install -m 0755 ${WORKDIR}/network.sh 
>> ${D}${sysconfdir}/udev/scripts
>>   }
>

-- 
# Randy MacLeod
# Wind River Linux



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] udev-extraconf: Add systemd-mount to udev-extraconf/mount.sh
  2018-04-23 20:20   ` Randy MacLeod
@ 2018-07-03  3:40     ` Hongzhi, Song
  2018-07-13  9:15       ` Hongzhi, Song
  0 siblings, 1 reply; 8+ messages in thread
From: Hongzhi, Song @ 2018-07-03  3:40 UTC (permalink / raw)
  To: Patches and discussions about the oe-core layer, Richard Purdie,
	Burton, Ross

ping.

The patch fixes the real problem. Please review it.

//Hongzhi


On 2018年04月24日 04:20, Randy MacLeod wrote:
> On 2018-04-22 11:37 PM, Hongzhi, Song wrote:
>> ping
>
> Please be patient.
>
> 0e-core-2.5 rc1 is being tested now and only critical blocking fixes 
> are being accepted.
>
> Once the results of 2.5 tests are good, then commits such as this one
> can be added to the master[-next] branch and then later cherry-picked 
> back to 2.5.1
> if needed.
>
> Give people a few days (or more if things don't go well) to get 2.5 
> out the door.
>
> ../Randy
>
>>
>> // Hongzhi
>>
>>
>> On 2018年04月17日 15:03, Hongzhi.Song wrote:
>>> Udev-extraconf works correctly with sysvinit in the aspect of 
>>> automounting
>>> block devices. But it has a serious problem in case of systemd. 
>>> Block devices
>>> automounted by udev is unaccessible to host space(out of udevd's 
>>> private
>>> namespace). For example, we cannot format those block devices.
>>>
>>> e.g.
>>>      root@qemux86:~# mkfs.ext4 /dev/sda1
>>>      mke2fs 1.43.8 (1-Jan-2018)
>>>      /dev/sda1 contains a ext4 file system
>>>      last mounted on Tue Apr  3 06:22:41 2018
>>>      Proceed anyway? (y,N) y
>>>      /dev/sda1 is apparently in use by the system; will not make a 
>>> filesystem here!
>>>
>>> Other distributions has no such problem, because they use a series 
>>> of rules to
>>> manager block devices. Different types of block devices match 
>>> different rules.
>>> But udev-extraconf just use one rule, automount.rules, which results 
>>> in this
>>> problem.
>>>
>>> The 'systemd-mount' command is recommended by the systemd community 
>>> to solve such
>>> problems.
>>>
>>> This patch makes use of 'systemd-mount' to solve the above problem.
>>>
>>> [YOCTO #12644]
>>>
>>> Signed-off-by: Hongzhi.Song <hongzhi.song@windriver.com>
>>> ---
>>>   meta/recipes-core/udev/udev-extraconf/mount.sh | 83 
>>> ++++++++++++++++++++------
>>>   meta/recipes-core/udev/udev-extraconf_1.1.bb   |  3 +
>>>   2 files changed, 69 insertions(+), 17 deletions(-)
>>>
>>> diff --git a/meta/recipes-core/udev/udev-extraconf/mount.sh 
>>> b/meta/recipes-core/udev/udev-extraconf/mount.sh
>>> index d760328..067d4e2 100644
>>> --- a/meta/recipes-core/udev/udev-extraconf/mount.sh
>>> +++ b/meta/recipes-core/udev/udev-extraconf/mount.sh
>>> @@ -4,10 +4,28 @@
>>>   #
>>>   # Attempt to mount any added block devices and umount any removed 
>>> devices
>>>   +BASE_INIT="`readlink "@base_sbindir@/init"`"
>>> +INIT_SYSTEMD="@systemd_unitdir@/systemd"
>>> +
>>> +if [ "x$BASE_INIT" = "x$INIT_SYSTEMD" ];then
>>> +    # systemd as init uses systemd-mount to mount block devices
>>> +    MOUNT="/usr/bin/systemd-mount"
>>> +    UMOUNT="/usr/bin/systemd-umount"
>>> +
>>> +    if [ -x $MOUNT ] && [ -x $UMOUNT ];
>>> +    then
>>> +        logger "Using systemd-mount to finish mount"
>>> +    else
>>> +        logger "Linux init is using systemd, so please install 
>>> systemd-mount to finish mount"
>>> +        exit 1
>>> +    fi
>>> +else
>>> +    MOUNT="/bin/mount"
>>> +    UMOUNT="/bin/umount"
>>> +fi
>>>   -MOUNT="/bin/mount"
>>>   PMOUNT="/usr/bin/pmount"
>>> -UMOUNT="/bin/umount"
>>> +
>>>   for line in `grep -h -v ^# /etc/udev/mount.blacklist 
>>> /etc/udev/mount.blacklist.d/*`
>>>   do
>>>       if [ ` expr match "$DEVNAME" "$line" ` -gt 0 ];
>>> @@ -17,7 +35,35 @@ do
>>>       fi
>>>   done
>>>   -automount() {
>>> +automount_systemd() {
>>> +    name="`basename "$DEVNAME"`"
>>> +
>>> +    [ -d "/run/media/$name" ] || mkdir -p "/run/media/$name"
>>> +
>>> +    MOUNT="$MOUNT -o silent"
>>> +
>>> +    # If filesystemtype is vfat, change the ownership group to 
>>> 'disk', and
>>> +    # grant it with  w/r/x permissions.
>>> +    case $ID_FS_TYPE in
>>> +    vfat|fat)
>>> +        MOUNT="$MOUNT -o umask=007,gid=`awk -F':' '/^disk/{print 
>>> $3}' /etc/group`"
>>> +        ;;
>>> +    # TODO
>>> +    *)
>>> +        ;;
>>> +    esac
>>> +
>>> +    if ! $MOUNT --no-block -t auto $DEVNAME "/run/media/$name"
>>> +    then
>>> +        #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME 
>>> \"/run/media/$name\" failed!"
>>> +        rm_dir "/run/media/$name"
>>> +    else
>>> +        logger "mount.sh/automount" "Auto-mount of 
>>> [/run/media/$name] successful"
>>> +        touch "/tmp/.automount-$name"
>>> +    fi
>>> +}
>>> +
>>> +automount() {
>>>       name="`basename "$DEVNAME"`"
>>>         ! test -d "/run/media/$name" && mkdir -p "/run/media/$name"
>>> @@ -26,7 +72,7 @@ automount() {
>>>       then
>>>           MOUNT="$MOUNT -o silent"
>>>       fi
>>> -
>>> +
>>>       # If filesystem type is vfat, change the ownership group to 
>>> 'disk', and
>>>       # grant it with  w/r/x permissions.
>>>       case $ID_FS_TYPE in
>>> @@ -68,23 +114,26 @@ if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ] 
>>> && [ -n "$ID_FS_TYPE" -o "$media_t
>>>       elif [ -x $MOUNT ]; then
>>>               $MOUNT $DEVNAME 2> /dev/null
>>>       fi
>>> -
>>> +
>>>       # If the device isn't mounted at this point, it isn't
>>>       # configured in fstab (note the root filesystem can show up as
>>>       # /dev/root in /proc/mounts, so check the device number too)
>>> -    if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
>>> -        grep -q "^$DEVNAME " /proc/mounts || automount
>>> -    fi
>>> +    if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
>>> +        if [ "`basename $MOUNT`" = "systemd-mount" ];then
>>> +            grep -q "^$DEVNAME " /proc/mounts || automount_systemd
>>> +        else
>>> +            grep -q "^$DEVNAME " /proc/mounts || automount
>>> +        fi
>>> +    fi
>>>   fi
>>>   -
>>>   if [ "$ACTION" = "remove" ] || [ "$ACTION" = "change" ] && [ -x 
>>> "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
>>> -    for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
>>> -    do
>>> -        $UMOUNT $mnt
>>> -    done
>>> -
>>> -    # Remove empty directories from auto-mounter
>>> -    name="`basename "$DEVNAME"`"
>>> -    test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
>>> +    for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `
>>> +    do
>>> +        $UMOUNT $mnt
>>> +    done
>>> +
>>> +    # Remove empty directories from auto-mounter
>>> +    name="`basename "$DEVNAME"`"
>>> +    test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
>>>   fi
>>> diff --git a/meta/recipes-core/udev/udev-extraconf_1.1.bb 
>>> b/meta/recipes-core/udev/udev-extraconf_1.1.bb
>>> index 43a1cff..90f933d 100644
>>> --- a/meta/recipes-core/udev/udev-extraconf_1.1.bb
>>> +++ b/meta/recipes-core/udev/udev-extraconf_1.1.bb
>>> @@ -29,6 +29,9 @@ do_install() {
>>>       install -d ${D}${sysconfdir}/udev/scripts/
>>>         install -m 0755 ${WORKDIR}/mount.sh 
>>> ${D}${sysconfdir}/udev/scripts/mount.sh
>>> +    sed -i 's|@systemd_unitdir@|${systemd_unitdir}|g' 
>>> ${D}${sysconfdir}/udev/scripts/mount.sh
>>> +    sed -i 's|@base_sbindir@|${base_sbindir}|g' 
>>> ${D}${sysconfdir}/udev/scripts/mount.sh
>>> +
>>>       install -m 0755 ${WORKDIR}/network.sh 
>>> ${D}${sysconfdir}/udev/scripts
>>>   }
>>
>



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] udev-extraconf: Add systemd-mount to udev-extraconf/mount.sh
  2018-07-03  3:40     ` Hongzhi, Song
@ 2018-07-13  9:15       ` Hongzhi, Song
  2018-07-25  1:26         ` Hongzhi, Song
  0 siblings, 1 reply; 8+ messages in thread
From: Hongzhi, Song @ 2018-07-13  9:15 UTC (permalink / raw)
  To: Patches and discussions about the oe-core layer, Richard Purdie,
	Burton, Ross

ping. Please.

-- Hongzhi


On 2018年07月03日 11:40, Hongzhi, Song wrote:
> ping.
>
> The patch fixes the real problem. Please review it.
>
> //Hongzhi
>
>
> On 2018年04月24日 04:20, Randy MacLeod wrote:
>> On 2018-04-22 11:37 PM, Hongzhi, Song wrote:
>>> ping
>>
>> Please be patient.
>>
>> 0e-core-2.5 rc1 is being tested now and only critical blocking fixes 
>> are being accepted.
>>
>> Once the results of 2.5 tests are good, then commits such as this one
>> can be added to the master[-next] branch and then later cherry-picked 
>> back to 2.5.1
>> if needed.
>>
>> Give people a few days (or more if things don't go well) to get 2.5 
>> out the door.
>>
>> ../Randy
>>
>>>
>>> // Hongzhi
>>>
>>>
>>> On 2018年04月17日 15:03, Hongzhi.Song wrote:
>>>> Udev-extraconf works correctly with sysvinit in the aspect of 
>>>> automounting
>>>> block devices. But it has a serious problem in case of systemd. 
>>>> Block devices
>>>> automounted by udev is unaccessible to host space(out of udevd's 
>>>> private
>>>> namespace). For example, we cannot format those block devices.
>>>>
>>>> e.g.
>>>>      root@qemux86:~# mkfs.ext4 /dev/sda1
>>>>      mke2fs 1.43.8 (1-Jan-2018)
>>>>      /dev/sda1 contains a ext4 file system
>>>>      last mounted on Tue Apr  3 06:22:41 2018
>>>>      Proceed anyway? (y,N) y
>>>>      /dev/sda1 is apparently in use by the system; will not make a 
>>>> filesystem here!
>>>>
>>>> Other distributions has no such problem, because they use a series 
>>>> of rules to
>>>> manager block devices. Different types of block devices match 
>>>> different rules.
>>>> But udev-extraconf just use one rule, automount.rules, which 
>>>> results in this
>>>> problem.
>>>>
>>>> The 'systemd-mount' command is recommended by the systemd community 
>>>> to solve such
>>>> problems.
>>>>
>>>> This patch makes use of 'systemd-mount' to solve the above problem.
>>>>
>>>> [YOCTO #12644]
>>>>
>>>> Signed-off-by: Hongzhi.Song <hongzhi.song@windriver.com>
>>>> ---
>>>>   meta/recipes-core/udev/udev-extraconf/mount.sh | 83 
>>>> ++++++++++++++++++++------
>>>>   meta/recipes-core/udev/udev-extraconf_1.1.bb   |  3 +
>>>>   2 files changed, 69 insertions(+), 17 deletions(-)
>>>>
>>>> diff --git a/meta/recipes-core/udev/udev-extraconf/mount.sh 
>>>> b/meta/recipes-core/udev/udev-extraconf/mount.sh
>>>> index d760328..067d4e2 100644
>>>> --- a/meta/recipes-core/udev/udev-extraconf/mount.sh
>>>> +++ b/meta/recipes-core/udev/udev-extraconf/mount.sh
>>>> @@ -4,10 +4,28 @@
>>>>   #
>>>>   # Attempt to mount any added block devices and umount any removed 
>>>> devices
>>>>   +BASE_INIT="`readlink "@base_sbindir@/init"`"
>>>> +INIT_SYSTEMD="@systemd_unitdir@/systemd"
>>>> +
>>>> +if [ "x$BASE_INIT" = "x$INIT_SYSTEMD" ];then
>>>> +    # systemd as init uses systemd-mount to mount block devices
>>>> +    MOUNT="/usr/bin/systemd-mount"
>>>> +    UMOUNT="/usr/bin/systemd-umount"
>>>> +
>>>> +    if [ -x $MOUNT ] && [ -x $UMOUNT ];
>>>> +    then
>>>> +        logger "Using systemd-mount to finish mount"
>>>> +    else
>>>> +        logger "Linux init is using systemd, so please install 
>>>> systemd-mount to finish mount"
>>>> +        exit 1
>>>> +    fi
>>>> +else
>>>> +    MOUNT="/bin/mount"
>>>> +    UMOUNT="/bin/umount"
>>>> +fi
>>>>   -MOUNT="/bin/mount"
>>>>   PMOUNT="/usr/bin/pmount"
>>>> -UMOUNT="/bin/umount"
>>>> +
>>>>   for line in `grep -h -v ^# /etc/udev/mount.blacklist 
>>>> /etc/udev/mount.blacklist.d/*`
>>>>   do
>>>>       if [ ` expr match "$DEVNAME" "$line" ` -gt 0 ];
>>>> @@ -17,7 +35,35 @@ do
>>>>       fi
>>>>   done
>>>>   -automount() {
>>>> +automount_systemd() {
>>>> +    name="`basename "$DEVNAME"`"
>>>> +
>>>> +    [ -d "/run/media/$name" ] || mkdir -p "/run/media/$name"
>>>> +
>>>> +    MOUNT="$MOUNT -o silent"
>>>> +
>>>> +    # If filesystemtype is vfat, change the ownership group to 
>>>> 'disk', and
>>>> +    # grant it with  w/r/x permissions.
>>>> +    case $ID_FS_TYPE in
>>>> +    vfat|fat)
>>>> +        MOUNT="$MOUNT -o umask=007,gid=`awk -F':' '/^disk/{print 
>>>> $3}' /etc/group`"
>>>> +        ;;
>>>> +    # TODO
>>>> +    *)
>>>> +        ;;
>>>> +    esac
>>>> +
>>>> +    if ! $MOUNT --no-block -t auto $DEVNAME "/run/media/$name"
>>>> +    then
>>>> +        #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME 
>>>> \"/run/media/$name\" failed!"
>>>> +        rm_dir "/run/media/$name"
>>>> +    else
>>>> +        logger "mount.sh/automount" "Auto-mount of 
>>>> [/run/media/$name] successful"
>>>> +        touch "/tmp/.automount-$name"
>>>> +    fi
>>>> +}
>>>> +
>>>> +automount() {
>>>>       name="`basename "$DEVNAME"`"
>>>>         ! test -d "/run/media/$name" && mkdir -p "/run/media/$name"
>>>> @@ -26,7 +72,7 @@ automount() {
>>>>       then
>>>>           MOUNT="$MOUNT -o silent"
>>>>       fi
>>>> -
>>>> +
>>>>       # If filesystem type is vfat, change the ownership group to 
>>>> 'disk', and
>>>>       # grant it with  w/r/x permissions.
>>>>       case $ID_FS_TYPE in
>>>> @@ -68,23 +114,26 @@ if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ] 
>>>> && [ -n "$ID_FS_TYPE" -o "$media_t
>>>>       elif [ -x $MOUNT ]; then
>>>>               $MOUNT $DEVNAME 2> /dev/null
>>>>       fi
>>>> -
>>>> +
>>>>       # If the device isn't mounted at this point, it isn't
>>>>       # configured in fstab (note the root filesystem can show up as
>>>>       # /dev/root in /proc/mounts, so check the device number too)
>>>> -    if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
>>>> -        grep -q "^$DEVNAME " /proc/mounts || automount
>>>> -    fi
>>>> +    if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
>>>> +        if [ "`basename $MOUNT`" = "systemd-mount" ];then
>>>> +            grep -q "^$DEVNAME " /proc/mounts || automount_systemd
>>>> +        else
>>>> +            grep -q "^$DEVNAME " /proc/mounts || automount
>>>> +        fi
>>>> +    fi
>>>>   fi
>>>>   -
>>>>   if [ "$ACTION" = "remove" ] || [ "$ACTION" = "change" ] && [ -x 
>>>> "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
>>>> -    for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " 
>>>> " `
>>>> -    do
>>>> -        $UMOUNT $mnt
>>>> -    done
>>>> -
>>>> -    # Remove empty directories from auto-mounter
>>>> -    name="`basename "$DEVNAME"`"
>>>> -    test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
>>>> +    for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " 
>>>> " `
>>>> +    do
>>>> +        $UMOUNT $mnt
>>>> +    done
>>>> +
>>>> +    # Remove empty directories from auto-mounter
>>>> +    name="`basename "$DEVNAME"`"
>>>> +    test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
>>>>   fi
>>>> diff --git a/meta/recipes-core/udev/udev-extraconf_1.1.bb 
>>>> b/meta/recipes-core/udev/udev-extraconf_1.1.bb
>>>> index 43a1cff..90f933d 100644
>>>> --- a/meta/recipes-core/udev/udev-extraconf_1.1.bb
>>>> +++ b/meta/recipes-core/udev/udev-extraconf_1.1.bb
>>>> @@ -29,6 +29,9 @@ do_install() {
>>>>       install -d ${D}${sysconfdir}/udev/scripts/
>>>>         install -m 0755 ${WORKDIR}/mount.sh 
>>>> ${D}${sysconfdir}/udev/scripts/mount.sh
>>>> +    sed -i 's|@systemd_unitdir@|${systemd_unitdir}|g' 
>>>> ${D}${sysconfdir}/udev/scripts/mount.sh
>>>> +    sed -i 's|@base_sbindir@|${base_sbindir}|g' 
>>>> ${D}${sysconfdir}/udev/scripts/mount.sh
>>>> +
>>>>       install -m 0755 ${WORKDIR}/network.sh 
>>>> ${D}${sysconfdir}/udev/scripts
>>>>   }
>>>
>>
>



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] udev-extraconf: Add systemd-mount to udev-extraconf/mount.sh
  2018-07-13  9:15       ` Hongzhi, Song
@ 2018-07-25  1:26         ` Hongzhi, Song
  2018-09-13 15:48           ` Randy MacLeod
  0 siblings, 1 reply; 8+ messages in thread
From: Hongzhi, Song @ 2018-07-25  1:26 UTC (permalink / raw)
  To: Patches and discussions about the oe-core layer, Richard Purdie,
	Burton, Ross

ping..

// Hongzhi


On 2018年07月13日 17:15, Hongzhi, Song wrote:
> ping. Please.
>
> -- Hongzhi
>
>
> On 2018年07月03日 11:40, Hongzhi, Song wrote:
>> ping.
>>
>> The patch fixes the real problem. Please review it.
>>
>> //Hongzhi
>>
>>
>> On 2018年04月24日 04:20, Randy MacLeod wrote:
>>> On 2018-04-22 11:37 PM, Hongzhi, Song wrote:
>>>> ping
>>>
>>> Please be patient.
>>>
>>> 0e-core-2.5 rc1 is being tested now and only critical blocking fixes 
>>> are being accepted.
>>>
>>> Once the results of 2.5 tests are good, then commits such as this one
>>> can be added to the master[-next] branch and then later 
>>> cherry-picked back to 2.5.1
>>> if needed.
>>>
>>> Give people a few days (or more if things don't go well) to get 2.5 
>>> out the door.
>>>
>>> ../Randy
>>>
>>>>
>>>> // Hongzhi
>>>>
>>>>
>>>> On 2018年04月17日 15:03, Hongzhi.Song wrote:
>>>>> Udev-extraconf works correctly with sysvinit in the aspect of 
>>>>> automounting
>>>>> block devices. But it has a serious problem in case of systemd. 
>>>>> Block devices
>>>>> automounted by udev is unaccessible to host space(out of udevd's 
>>>>> private
>>>>> namespace). For example, we cannot format those block devices.
>>>>>
>>>>> e.g.
>>>>>      root@qemux86:~# mkfs.ext4 /dev/sda1
>>>>>      mke2fs 1.43.8 (1-Jan-2018)
>>>>>      /dev/sda1 contains a ext4 file system
>>>>>      last mounted on Tue Apr  3 06:22:41 2018
>>>>>      Proceed anyway? (y,N) y
>>>>>      /dev/sda1 is apparently in use by the system; will not make a 
>>>>> filesystem here!
>>>>>
>>>>> Other distributions has no such problem, because they use a series 
>>>>> of rules to
>>>>> manager block devices. Different types of block devices match 
>>>>> different rules.
>>>>> But udev-extraconf just use one rule, automount.rules, which 
>>>>> results in this
>>>>> problem.
>>>>>
>>>>> The 'systemd-mount' command is recommended by the systemd 
>>>>> community to solve such
>>>>> problems.
>>>>>
>>>>> This patch makes use of 'systemd-mount' to solve the above problem.
>>>>>
>>>>> [YOCTO #12644]
>>>>>
>>>>> Signed-off-by: Hongzhi.Song <hongzhi.song@windriver.com>
>>>>> ---
>>>>>   meta/recipes-core/udev/udev-extraconf/mount.sh | 83 
>>>>> ++++++++++++++++++++------
>>>>>   meta/recipes-core/udev/udev-extraconf_1.1.bb   |  3 +
>>>>>   2 files changed, 69 insertions(+), 17 deletions(-)
>>>>>
>>>>> diff --git a/meta/recipes-core/udev/udev-extraconf/mount.sh 
>>>>> b/meta/recipes-core/udev/udev-extraconf/mount.sh
>>>>> index d760328..067d4e2 100644
>>>>> --- a/meta/recipes-core/udev/udev-extraconf/mount.sh
>>>>> +++ b/meta/recipes-core/udev/udev-extraconf/mount.sh
>>>>> @@ -4,10 +4,28 @@
>>>>>   #
>>>>>   # Attempt to mount any added block devices and umount any 
>>>>> removed devices
>>>>>   +BASE_INIT="`readlink "@base_sbindir@/init"`"
>>>>> +INIT_SYSTEMD="@systemd_unitdir@/systemd"
>>>>> +
>>>>> +if [ "x$BASE_INIT" = "x$INIT_SYSTEMD" ];then
>>>>> +    # systemd as init uses systemd-mount to mount block devices
>>>>> +    MOUNT="/usr/bin/systemd-mount"
>>>>> +    UMOUNT="/usr/bin/systemd-umount"
>>>>> +
>>>>> +    if [ -x $MOUNT ] && [ -x $UMOUNT ];
>>>>> +    then
>>>>> +        logger "Using systemd-mount to finish mount"
>>>>> +    else
>>>>> +        logger "Linux init is using systemd, so please install 
>>>>> systemd-mount to finish mount"
>>>>> +        exit 1
>>>>> +    fi
>>>>> +else
>>>>> +    MOUNT="/bin/mount"
>>>>> +    UMOUNT="/bin/umount"
>>>>> +fi
>>>>>   -MOUNT="/bin/mount"
>>>>>   PMOUNT="/usr/bin/pmount"
>>>>> -UMOUNT="/bin/umount"
>>>>> +
>>>>>   for line in `grep -h -v ^# /etc/udev/mount.blacklist 
>>>>> /etc/udev/mount.blacklist.d/*`
>>>>>   do
>>>>>       if [ ` expr match "$DEVNAME" "$line" ` -gt 0 ];
>>>>> @@ -17,7 +35,35 @@ do
>>>>>       fi
>>>>>   done
>>>>>   -automount() {
>>>>> +automount_systemd() {
>>>>> +    name="`basename "$DEVNAME"`"
>>>>> +
>>>>> +    [ -d "/run/media/$name" ] || mkdir -p "/run/media/$name"
>>>>> +
>>>>> +    MOUNT="$MOUNT -o silent"
>>>>> +
>>>>> +    # If filesystemtype is vfat, change the ownership group to 
>>>>> 'disk', and
>>>>> +    # grant it with  w/r/x permissions.
>>>>> +    case $ID_FS_TYPE in
>>>>> +    vfat|fat)
>>>>> +        MOUNT="$MOUNT -o umask=007,gid=`awk -F':' '/^disk/{print 
>>>>> $3}' /etc/group`"
>>>>> +        ;;
>>>>> +    # TODO
>>>>> +    *)
>>>>> +        ;;
>>>>> +    esac
>>>>> +
>>>>> +    if ! $MOUNT --no-block -t auto $DEVNAME "/run/media/$name"
>>>>> +    then
>>>>> +        #logger "mount.sh/automount" "$MOUNT -t auto $DEVNAME 
>>>>> \"/run/media/$name\" failed!"
>>>>> +        rm_dir "/run/media/$name"
>>>>> +    else
>>>>> +        logger "mount.sh/automount" "Auto-mount of 
>>>>> [/run/media/$name] successful"
>>>>> +        touch "/tmp/.automount-$name"
>>>>> +    fi
>>>>> +}
>>>>> +
>>>>> +automount() {
>>>>>       name="`basename "$DEVNAME"`"
>>>>>         ! test -d "/run/media/$name" && mkdir -p "/run/media/$name"
>>>>> @@ -26,7 +72,7 @@ automount() {
>>>>>       then
>>>>>           MOUNT="$MOUNT -o silent"
>>>>>       fi
>>>>> -
>>>>> +
>>>>>       # If filesystem type is vfat, change the ownership group to 
>>>>> 'disk', and
>>>>>       # grant it with  w/r/x permissions.
>>>>>       case $ID_FS_TYPE in
>>>>> @@ -68,23 +114,26 @@ if [ "$ACTION" = "add" ] && [ -n "$DEVNAME" ] 
>>>>> && [ -n "$ID_FS_TYPE" -o "$media_t
>>>>>       elif [ -x $MOUNT ]; then
>>>>>               $MOUNT $DEVNAME 2> /dev/null
>>>>>       fi
>>>>> -
>>>>> +
>>>>>       # If the device isn't mounted at this point, it isn't
>>>>>       # configured in fstab (note the root filesystem can show up as
>>>>>       # /dev/root in /proc/mounts, so check the device number too)
>>>>> -    if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
>>>>> -        grep -q "^$DEVNAME " /proc/mounts || automount
>>>>> -    fi
>>>>> +    if expr $MAJOR "*" 256 + $MINOR != `stat -c %d /`; then
>>>>> +        if [ "`basename $MOUNT`" = "systemd-mount" ];then
>>>>> +            grep -q "^$DEVNAME " /proc/mounts || automount_systemd
>>>>> +        else
>>>>> +            grep -q "^$DEVNAME " /proc/mounts || automount
>>>>> +        fi
>>>>> +    fi
>>>>>   fi
>>>>>   -
>>>>>   if [ "$ACTION" = "remove" ] || [ "$ACTION" = "change" ] && [ -x 
>>>>> "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
>>>>> -    for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d 
>>>>> " " `
>>>>> -    do
>>>>> -        $UMOUNT $mnt
>>>>> -    done
>>>>> -
>>>>> -    # Remove empty directories from auto-mounter
>>>>> -    name="`basename "$DEVNAME"`"
>>>>> -    test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
>>>>> +    for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d 
>>>>> " " `
>>>>> +    do
>>>>> +        $UMOUNT $mnt
>>>>> +    done
>>>>> +
>>>>> +    # Remove empty directories from auto-mounter
>>>>> +    name="`basename "$DEVNAME"`"
>>>>> +    test -e "/tmp/.automount-$name" && rm_dir "/run/media/$name"
>>>>>   fi
>>>>> diff --git a/meta/recipes-core/udev/udev-extraconf_1.1.bb 
>>>>> b/meta/recipes-core/udev/udev-extraconf_1.1.bb
>>>>> index 43a1cff..90f933d 100644
>>>>> --- a/meta/recipes-core/udev/udev-extraconf_1.1.bb
>>>>> +++ b/meta/recipes-core/udev/udev-extraconf_1.1.bb
>>>>> @@ -29,6 +29,9 @@ do_install() {
>>>>>       install -d ${D}${sysconfdir}/udev/scripts/
>>>>>         install -m 0755 ${WORKDIR}/mount.sh 
>>>>> ${D}${sysconfdir}/udev/scripts/mount.sh
>>>>> +    sed -i 's|@systemd_unitdir@|${systemd_unitdir}|g' 
>>>>> ${D}${sysconfdir}/udev/scripts/mount.sh
>>>>> +    sed -i 's|@base_sbindir@|${base_sbindir}|g' 
>>>>> ${D}${sysconfdir}/udev/scripts/mount.sh
>>>>> +
>>>>>       install -m 0755 ${WORKDIR}/network.sh 
>>>>> ${D}${sysconfdir}/udev/scripts
>>>>>   }
>>>>
>>>
>>
>



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] udev-extraconf: Add systemd-mount to udev-extraconf/mount.sh
  2018-07-25  1:26         ` Hongzhi, Song
@ 2018-09-13 15:48           ` Randy MacLeod
  0 siblings, 0 replies; 8+ messages in thread
From: Randy MacLeod @ 2018-09-13 15:48 UTC (permalink / raw)
  To: Hongzhi, Song, Patches and discussions about the oe-core layer,
	Richard Purdie, Burton, Ross

On 07/24/2018 09:26 PM, Hongzhi, Song wrote:
> ping..

This commit is still in patchworks:
    https://patchwork.openembedded.org/patch/150168/

and still applies on master:
325af0f4a8 (origin/master, origin/HEAD)
            python3: fix openssl 1.1.1 changes
and on master-next at:
ed2d91a72e (origin/master-next)
            oeqa/selftest/recipetool: fix non-determinism in cmake test

It's an M3 Medium+ bug:

https://bugzilla.yoctoproject.org/show_bug.cgi?id=12644

We've applied it locally and
it passed a verification test.

-- 
# Randy MacLeod
# Wind River Linux


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2018-09-13 15:49 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-17  7:03 [PATCH v3] udev-extraconf: Add systemd-mount to udev-extraconf/mount.sh Hongzhi.Song
2018-04-20  7:45 ` Hongzhi, Song
2018-04-23  3:37 ` Hongzhi, Song
2018-04-23 20:20   ` Randy MacLeod
2018-07-03  3:40     ` Hongzhi, Song
2018-07-13  9:15       ` Hongzhi, Song
2018-07-25  1:26         ` Hongzhi, Song
2018-09-13 15:48           ` Randy MacLeod

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.