udev: Warten Sie, bis die Geräteberechtigungen festgelegt sind, bevor Sie das Skript ausführen

392
BadIdeaException

Ich versuche, USB-Geräte mit udev in einen laufenden Docker-Container zu übergeben. Das Skript wird jedoch aufgerufen, bevor die Berechtigungen und der Gruppeneigentum auf dem Gerät richtig festgelegt sind. Dies verursacht alle Arten von Berechtigungsproblemen im Container. Wie kann ich das lösen?

Die häufigste Antwort, die ich auf Google sehe, umfasst sleepein Skript, das ein anderes anruft, aber dies erscheint mir hackig. Gibt es einen besseren Weg?

Dies ist die relevante Funktion des aufgerufenen Skripts zum Hinzufügen des Geräts:

function add_device() { # Check that device exists and is a character device if [ ! -e $DEV ] || [ ! -c $DEV ] then exit 1 fi  MAJOR=$(echo $((0x$(stat -c "%t" "$DEV")))) # Get major number and convert to decimal with echo MINOR=$(echo $((0x$(stat -c "%T" "$DEV")))) # Get minor number and convert to decimal with echo MODE=$(stat -c "%a" "$DEV") # Get device file permissions GID=$(stat -c "%g" "$DEV") # Get device file group id  docker exec $CONTAINER /bin/bash -c "mkdir -p $(dirname $DEV) \ && mknod -m $MODE $DEV c $MAJOR $MINOR \ && chgrp $GID $DEV \ && echo $(date --rfc-3339=seconds): Character device $DEV created as (major:minor) $MAJOR:$MINOR with owner root:$GID and permissions $MODE >> /var/log/dynamic-devices.log" } 
0

0 Antworten auf die Frage