fix: mount SD kaart dynamisch via udev %k i.p.v. hardcoded UUID
dashcam-transfer-mount.sh mountte altijd /dev/disk/by-uuid/00D3-7715. Een geherformatteerde of andere kaart heeft een ander filesystem UUID, waardoor de mount faalde (TRIGGER ERROR) en de transfer nooit startte. De udev rule geeft nu het kernel device (%k) door; de helper mount dat device dynamisch. Werkt ongeacht het FS-UUID van de kaart.
This commit is contained in:
parent
c7e046f4ab
commit
8ef7078ba4
2 changed files with 40 additions and 21 deletions
20
README.md
20
README.md
|
|
@ -8,9 +8,9 @@ organisatie per datum en camera-positie (front/back). Draait op de **nextcloud**
|
||||||
```
|
```
|
||||||
SD-kaart insteken
|
SD-kaart insteken
|
||||||
→ udev detecteert vendor:product (14cd:1212 of 05e3:0751)
|
→ udev detecteert vendor:product (14cd:1212 of 05e3:0751)
|
||||||
→ systemd-run start /usr/local/bin/dashcam-transfer-mount.sh
|
→ systemd-run start /usr/local/bin/dashcam-transfer-mount %k
|
||||||
→ wacht tot /dev/disk/by-uuid/00D3-7715 verschijnt (max 60s)
|
→ wacht tot /dev/sdX1 verschijnt (max 60s)
|
||||||
→ mount UUID op /mnt/sdcard (uid=1000, exfat)
|
→ mount apparaat dynamisch op /mnt/sdcard (uid=1000, exfat)
|
||||||
→ systemctl start dashcam-transfer.service
|
→ systemctl start dashcam-transfer.service
|
||||||
→ /usr/local/bin/dashcam-transfer.py
|
→ /usr/local/bin/dashcam-transfer.py
|
||||||
1. Check mounts (/mnt/sdcard, /mnt/ultratouch)
|
1. Check mounts (/mnt/sdcard, /mnt/ultratouch)
|
||||||
|
|
@ -25,10 +25,11 @@ SD-kaart insteken
|
||||||
| Component | Mount | Device | Doel |
|
| Component | Mount | Device | Doel |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| USB-SSD (4TB, Seagate Ultra Touch) | `/mnt/ultratouch` | `/dev/disk/by-uuid/3027-8ECA` | Opslag |
|
| 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).
|
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
|
## 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 rule (`/etc/udev/rules.d/99-dashcam-trigger.rules`)
|
||||||
|
|
||||||
```udev
|
```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}=="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"
|
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`)
|
### 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`)
|
### Systemd service (`/etc/systemd/system/dashcam-transfer.service`)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,39 @@
|
||||||
#!/bin/bash
|
#!/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.
|
# Called by udev rule 99-dashcam-trigger.rules via systemd-run.
|
||||||
# systemd-run is used (not direct udev exec) because udev context
|
# systemd-run is used (not direct udev exec) because udev context
|
||||||
# lacks mount/umount permissions on Fedora with SELinux enforcing.
|
# lacks mount/umount permissions on Fedora with SELinux enforcing.
|
||||||
UUID=/dev/disk/by-uuid/00D3-7715
|
#
|
||||||
logger -t dashcam-transfer Trigger: SD card detected
|
# 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
|
for ((i=0; i<60; i++)); do
|
||||||
if [ -e "$UUID" ]; then
|
if [ -e "$DEV" ]; then
|
||||||
logger -t dashcam-transfer Trigger: device ready after ${i}s
|
logger -t dashcam-transfer "Trigger: device ready after ${i}s"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
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
|
while mountpoint -q /mnt/sdcard 2>/dev/null; do
|
||||||
umount /mnt/sdcard 2>/dev/null || break
|
umount /mnt/sdcard 2>/dev/null || break
|
||||||
done
|
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
|
if [ $? -eq 0 ]; then
|
||||||
logger -t dashcam-transfer Trigger: mounted, starting transfer
|
logger -t dashcam-transfer "Trigger: mounted, starting transfer"
|
||||||
systemctl start dashcam-transfer
|
systemctl start dashcam-transfer
|
||||||
else
|
else
|
||||||
logger -t dashcam-transfer TRIGGER ERROR: mount failed
|
logger -t dashcam-transfer "TRIGGER ERROR: mount failed"
|
||||||
fi
|
fi
|
||||||
Loading…
Reference in a new issue