diff --git a/README.md b/README.md index 35206c6..41b4513 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,9 @@ organisatie per datum en camera-positie (front/back). Draait op de **nextcloud** ``` SD-kaart insteken → udev detecteert vendor:product (14cd:1212 of 05e3:0751) - → systemd-run start /usr/local/bin/dashcam-transfer-mount.sh - → wacht tot /dev/disk/by-uuid/00D3-7715 verschijnt (max 60s) - → mount UUID op /mnt/sdcard (uid=1000, exfat) + → systemd-run start /usr/local/bin/dashcam-transfer-mount %k + → wacht tot /dev/sdX1 verschijnt (max 60s) + → mount apparaat dynamisch op /mnt/sdcard (uid=1000, exfat) → systemctl start dashcam-transfer.service → /usr/local/bin/dashcam-transfer.py 1. Check mounts (/mnt/sdcard, /mnt/ultratouch) @@ -25,10 +25,11 @@ SD-kaart insteken | Component | Mount | Device | Doel | |---|---|---|---| | USB-SSD (4TB, Seagate Ultra Touch) | `/mnt/ultratouch` | `/dev/disk/by-uuid/3027-8ECA` | Opslag | -| SD-kaart (via USB reader) | `/mnt/sdcard` | `/dev/disk/by-uuid/00D3-7715` | Bron | +| SD-kaart (via USB reader) | `/mnt/sdcard` | dynamisch via udev `%k` | Bron | SSD wordt gemount via systemd `.automount` unit (permanent aangesloten). -SD-kaart wordt gemount door `dashcam-transfer-mount.sh` na udev trigger. +SD-kaart wordt gemount door `dashcam-transfer-mount.sh` na udev trigger, met het +kernel-device (b.v. `sde1`) als argument — zo werkt het ongeacht het filesystem UUID. ## Bestandsstructuur @@ -79,13 +80,16 @@ De container: `docker-compose.yml` in `/home/aiaiaiaiagent/wwebjs-api/`. ### Udev rule (`/etc/udev/rules.d/99-dashcam-trigger.rules`) ```udev -ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd*[0-9]", ENV{ID_VENDOR_ID}=="14cd", ENV{ID_MODEL_ID}=="1212", RUN+="/usr/bin/systemd-run --no-block --collect /usr/local/bin/dashcam-transfer-mount" -ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd*[0-9]", ENV{ID_VENDOR_ID}=="05e3", ENV{ID_MODEL_ID}=="0751", RUN+="/usr/bin/systemd-run --no-block --collect /usr/local/bin/dashcam-transfer-mount" +ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd*[0-9]", ENV{ID_VENDOR_ID}=="14cd", ENV{ID_MODEL_ID}=="1212", RUN+="/usr/bin/systemd-run --no-block --collect /usr/local/bin/dashcam-transfer-mount %k" +ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd*[0-9]", ENV{ID_VENDOR_ID}=="05e3", ENV{ID_MODEL_ID}=="0751", RUN+="/usr/bin/systemd-run --no-block --collect /usr/local/bin/dashcam-transfer-mount %k" ``` +`%k` geeft het kernel device (b.v. `sde1`) door aan het mount script. + ### Mount script (`/usr/local/bin/dashcam-transfer-mount.sh`) -Wacht tot de UUID beschikbaar is, unmount eventuele stale mounts, mount de SD-kaart en start de service. +Wacht tot het doorgegeven device beschikbaar is, unmount eventuele stale mounts, +mount de SD-kaart en start de service. ### Systemd service (`/etc/systemd/system/dashcam-transfer.service`) diff --git a/dashcam-transfer-mount.sh b/dashcam-transfer-mount.sh index ce8a627..559a742 100755 --- a/dashcam-transfer-mount.sh +++ b/dashcam-transfer-mount.sh @@ -1,24 +1,39 @@ #!/bin/bash -# Mount SD card by UUID and start dashcam transfer. +# Mount SD card and start dashcam transfer. # Called by udev rule 99-dashcam-trigger.rules via systemd-run. # systemd-run is used (not direct udev exec) because udev context # lacks mount/umount permissions on Fedora with SELinux enforcing. -UUID=/dev/disk/by-uuid/00D3-7715 -logger -t dashcam-transfer Trigger: SD card detected -for ((i=0; i<60; i++)); do - if [ -e "$UUID" ]; then - logger -t dashcam-transfer Trigger: device ready after ${i}s - break - fi - sleep 1 -done +# +# The udev rule passes the kernel name (e.g. "sde1") as $1 so the +# device is mounted dynamically, independent of its filesystem UUID. +DEV=${1:+/dev/$1} +logger -t dashcam-transfer "Trigger: SD card detected ($DEV)" +if [ -n "$1" ]; then + for ((i=0; i<60; i++)); do + if [ -e "$DEV" ]; then + logger -t dashcam-transfer "Trigger: device ready after ${i}s" + break + fi + sleep 1 + done +else + UUID=$(lsblk -rno UUID /dev/sde1 2>/dev/null) + DEV=/dev/disk/by-uuid/$UUID + for ((i=0; i<60; i++)); do + if [ -e "$DEV" ]; then + logger -t dashcam-transfer "Trigger: device ready after ${i}s" + break + fi + sleep 1 + done +fi while mountpoint -q /mnt/sdcard 2>/dev/null; do umount /mnt/sdcard 2>/dev/null || break done -mount "$UUID" /mnt/sdcard -o uid=1000,gid=1000,fmask=0000,dmask=0000 2>/dev/null +mount "$DEV" /mnt/sdcard -o uid=1000,gid=1000,fmask=0000,dmask=0000 if [ $? -eq 0 ]; then - logger -t dashcam-transfer Trigger: mounted, starting transfer + logger -t dashcam-transfer "Trigger: mounted, starting transfer" systemctl start dashcam-transfer else - logger -t dashcam-transfer TRIGGER ERROR: mount failed + logger -t dashcam-transfer "TRIGGER ERROR: mount failed" fi \ No newline at end of file