Service starten ná USB voor Docker

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Sa1
  • Registratie: Oktober 2000
  • Laatst online: 23:58
Mijn vraag

Al lange tijd maak ik gebruik van een Raspberry Pi 4. Heb de 8GB variant met een SSD USB disk. Ik draai hier de 64bit variant op:

code:
1
2
 uname -a
Linux docker 5.10.103-v8+ #1529 SMP PREEMPT Tue Mar 8 12:26:46 GMT 2022 aarch64 GNU/Linux


Het systeem draait primair docker met zo'n 25 containers. De belangrijkste daarvan is Home Assistant. Deze doet een hoop zaken voor mijn huis.

Ik heb een RFXCom via USB aangesloten om zo mijn ASA motor zonwering te kunnen bedienen. Deze is via usb aangesloten op de Pi4 maar heb hem via de applicatie ser2net zo gemaakt dat hij via port 50000 te benaderen is over het netwerk.

Dit heeft als voordeel dat ik niet fysiek het apparaat aan mijn laptop hoef te hangen om dingen te testen / configureren.

Mijn probleem is dat als mijn pi4 een reboot krijgt (soms vanwege een vast loper, soms bewust) ser2net niet goed start. Hij geeft aan dat de config niet juist is. Doe ik handmatig daarna ser2net starten met
code:
1
sudo systemctl restart ser2net
dan start hij direct.

Mijn vermoeden is dus dat hij al probeert te starten terwijl de USB nog niet geladen is.

Het gevolg hiervan is dat HA start, zonder dat poort 50000 up and running en daarmee de integration RFXcom niet start. Logisch; immers is de poort niet benaderbaar.

Relevante software en hardware die ik gebruik

Ser2net
RFXcom
2022.3 van HA in docker

Wat ik al gevonden of geprobeerd heb

Uiteraard een beetje zitten zoeken. Uiteindelijk ben ik gekomen een reditpost die suggereerde om de service ser2net te starten na het checken van USB

ser2net.service heb ik aangepast met het volgende:

code:
1
2
3
4
[Unit]
Description=Serial port to network proxy
Documentation=man:ser2net(8)
After=dev-bus-usb-001-003.device


De regel met 'after' heb ik toegevoegd, dat device heb ik aangemaakt met een udev commando en de 001-003 heb ik achterhaald door lsusb te doen, daar komt het volgende uit:

code:
1
Bus 001 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC


Volgens de theorie van het bewuste reddit post zou dus ser2net pas mogen starten als die udev device er is.

Helaas lijkt het niet echt te werken.


...

Alle reacties


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 00:47
Dat is tot zover logisch, want wat je op Reddit hebt gevonden klopt inderdaad niet. Bekende valstrik van systemd. Zie systemd.unit en lees heel aandachtig Wants/Requires/Before/After/BindsTo om het verschil te begrijpen.

Eentje gaat over ordering (die heb je gebruikt) maar dat is iets anders dan een afhankelijkheid (dat is wat je wil). Ik denk dat BindsTo hier het netste is.

En controleer eens de status van je dev-bus-usb-001-003.device (net als je dat met een service doet) - wordt deze inderdaad aangemaakt en is deze 'running'? Op basis van 'udev commando' is me niet helemaal duidelijk of je dit nu goed hebt gedaan, volgens de handleiding van systemd (systemd.device) hierover is de bedoeling dat je een udev rule aanmaakt met een systemd tag (als de device unit er inderdaad niet vanzelf is).

Acties:
  • 0 Henk 'm!

  • Sa1
  • Registratie: Oktober 2000
  • Laatst online: 23:58
Op basis van het volgende artikel heb ik mijn aanpassingen gedaan: https://superuser.com/que...-i-say-after-usb-is-ready

Als ik systemctl status dev-bus-usb-001-001.device uitvoer:

code:
1
2
3
4
5
6
7
8
pi@docker:~ $ systemctl status dev-bus-usb-001-001.device
● dev-bus-usb-001-001.device - 2.0 root hub
   Follow: unit currently follows state of sys-devices-platform-scb-fd500000.pcie-pci0000:00-0000:00:00.0-0000:01:00.0-usb1.device
     Loaded: loaded
     Active: active (plugged) since Tue 2022-04-05 09:29:21 CEST; 6min ago
     Device: /sys/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1

Apr 05 09:29:21 docker systemd[1]: Found device 2.0 root hub.


Deze lijkt dus active. Heb de ser2net.service aangepast op basis van jouw opmerking:

code:
1
2
3
4
5
[Unit]
Description=Serial port to network proxy
Documentation=man:ser2net(8)
After=dev-bus-usb-001-001.device
BindsTo=dev-bus-usb-001-001.device


Helaas:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
pi@docker:~ $ sudo systemctl status ser2net
● ser2net.service - Serial port to network proxy
     Loaded: loaded (/lib/systemd/system/ser2net.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-04-05 09:29:24 CEST; 3min 50s ago
       Docs: man:ser2net(8)
   Main PID: 459 (ser2net)
      Tasks: 1 (limit: 8986)
     Memory: 5.2M
        CPU: 109ms
     CGroup: /system.slice/ser2net.service
             └─459 /usr/sbin/ser2net -n -c /etc/ser2net.yaml -P /run/ser2net.pid

Apr 05 09:29:23 docker systemd[1]: Starting Serial port to network proxy...
Apr 05 09:29:24 docker systemd[1]: Started Serial port to network proxy.
Apr 05 09:29:24 docker ser2net[459]: Invalid port name/number: Invalid data to parameter on line 23 column 0
Apr 05 09:29:24 docker ser2net[459]: Invalid port name/number: Invalid data to parameter on line 23 column 0


Als ik systemctl status dev-bus-usb-001-001.device doe dan ziet hij de 'hub' wel. Ik kan echter niet systemctl status dev-bus-usb-001-003.device doen. Die geeft namelijk notloaded.

Acties:
  • 0 Henk 'm!

  • Sa1
  • Registratie: Oktober 2000
  • Laatst online: 23:58
Ik kom zojuist https://github.com/cminyard/ser2net/issues/52 tegen.

Heb het volgende nu aangepast obv bovenstaande link:

code:
1
2
After=network-online.target
Wants=network-online.target


En dit werkt zowaar keurig. 2 x al een reboot gedaan en beide keren doet hij het.

Tnx voor je hulp iig!