1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4ublk_docker_add() 5{ 6 local name=$1 7 local maj=$2 8 local min=$3 9 local uid=$4 10 local container=$5 11 12 #echo "docker add $name" >> /tmp/udev_docker_udev.log 13 if [[ "$name" == *"ublkc"* ]]; then 14 docker exec -u 0 $container mknod /dev/$name c $maj $min 15 docker exec -u 0 $container chown $uid /dev/$name 16 docker exec -u 0 $container chmod 700 /dev/$name 17 elif [[ "$name" == *"ublkb"* ]]; then 18 docker exec -u 0 $container mknod /dev/$name b $maj $min 19 docker exec -u 0 $container chown $uid /dev/$name 20 docker exec -u 0 $container chmod 700 /dev/$name 21 fi 22} 23 24ublk_docker_remove() 25{ 26 local name=$1 27 local maj=$2 28 local min=$3 29 local uid=$4 30 local container=$5 31 32 #echo "docker remove $name" >> /tmp/udev_docker_udev.log 33 if [[ "$name" == *"ublkc"* ]]; then 34 docker exec -u 0 $container rm /dev/$name 35 elif [[ "$name" == *"ublkb"* ]]; then 36 docker exec -u 0 $container rm /dev/$name 37 fi 38} 39 40MY_DIR=$(cd "$(dirname "$0")";pwd) 41DEV=$1 42ID=`${MY_DIR}/ublk_user_id $1` 43 44#echo $@ >> /tmp/udev_docker_udev.log 45 46#add ublk devices for interested containers 47if [ "$2" == "add" ]; then 48 if CONTAINERS=`docker ps --format "{{.Names}}"`; then 49 #echo $CONTAINERS >> /tmp/udev_docker_udev.log 50 for C in $CONTAINERS; do 51 if ps -ax | grep docker | grep $ID > /dev/null 2>&1; then 52 ublk_docker_add $DEV $3 $4 $ID $C 53 fi 54 done 55 fi 56elif [ "$2" == "remove" ]; then 57 if CONTAINERS=`docker ps --format "{{.Names}}"`; then 58 #echo $CONTAINERS >> /tmp/udev_docker_udev.log 59 for C in $CONTAINERS; do 60 ublk_docker_remove $DEV $3 $4 $ID $C 61 done 62 fi 63fi 64 65if [ "$2" == "add" ]; then 66 if [ "${ID}" != "-1:-1" ]; then 67 /usr/bin/chown $ID /dev/$1 > /dev/null 2>&1 68 fi 69fi 70