Estou tentando passar dispositivos USB para um contêiner do docker em execução usando o udev. No entanto, o script é chamado de antes que as permissões e a propriedade do grupo sejam definidas corretamente no dispositivo, causando todos os tipos de problemas de permissão no contêiner. Como posso resolver isso?
A resposta mais comum que eu vejo no google envolve sleep
e um script chamando outro, mas isso parece hackish para mim. Existe uma maneira melhor?
Esta é a função relevante do script chamado para adicionar o dispositivo:
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"
}
Tags udev linux device-manager