Open geimist opened 1 week ago
Wie im anderen Thema bereits geschrieben, wäre das very nice!
Lokale Installation ist auf jeden Fall zu bevorzugen, das ist keine Frage. Das ist auch jetzt schon möglich, es gibt aber noch keine vernünftige Anleitung dafür. Das Modul "phoneblock-ab" baut eine Java-Anwendung, die man "einfach" lokal starten kann, überall da wo man eine Java 17 VM zur Verfügung hat - Windows, Linux, RaspberryPI:
Das Problem bei einem Docker-Image ist die Tatsache, dass das VOIP/RTP-Protokoll, dass der AB mit der Fritz!Box sprechen muss, nicht wie HTTP eine Einwegekommunikation ist, sondern beide Beteiligten müssen sich gegenseitig "aufrufen" können. Wenn man den AB in ein Docker-Image packt, dann muss man alle Ports, die für diese Kommunikation notwendig sind. von dem Docker-Image an Host weiterleiten, was die Konfiguration noch aufwendiger und fehleranfälliger macht. Auf jeden Fall möglich, aber nicht simpel. Eine "normale" Installation als Service auf einem RaspberryPI hat aber weniger Fehlerpotential. Siehe #90.
Für den Fall kann man das Netzwerk des Containers statt im Bridge- im Host-Mode laufen lassen. Damit kann er frei sprechen und hören. (Ich frage für mein Synology NAS, wo man grundsätzlich nicht ohne Drittanbieter eine Laufzeitumgebung wie Java installieren kann, aber Docker vorhanden ist)
Wäre es eine Möglichkeit, die kompilierte Java Anwendung in den Releases zur Verfügung zu stellen? Da müsste die nicht jeder selbst bauen, wenn sie statisch kompiliert eh für jeden gleich ist (ich hatte bisher noch keine Berührung zu Java). Das wäre vielleicht ein guter Startpunkt, oder?
... Containers statt im Bridge- im Host-Mode laufen lassen...
Das kingt gut - da sieht man, dass ich mich mit Container zu wenig auskenne... :-)
...für mein Synology NAS, wo man grundsätzlich nicht ohne Drittanbieter...
Ja, das ist natürlich eine vollkommen valide Anforderung - sollten wir ausprobieren.
Wäre es eine Möglichkeit, die kompilierte Java Anwendung in den Releases zur Verfügung zu stellen?
Ja, das bereite ich vor. Angefangen habe ich schon mal das Build&Configure&Run zu beschreiben: https://github.com/haumacher/phoneblock/tree/master/phoneblock-ab aber wenn man das ganze Tooling noch nicht hat (Maven & Co) dann ist es etwas lästig, ja.
Um so ein Docker-Image "vernünftig" (=massentauglich) nutzen zu können, müsste dieses auch eine Konfigurations-Weboberfläche anbieten, da man doch eine ganze Reihe Optionen ausfüllen muss und WAV-Files für die Ansagetexte zur Verfügung stellen muss. Das muss aber eigentlich alles in das Dockerimage rein.
GUI finde ich super, aber so etwas ist für mich immer ein rotes Tuch, weil ich da 0 dazu beitragen kann. Man sollte doch das Meiste über Umgebungsvariablen realisieren können (oder man bindet ein JSON für die Konfiguration ein, welches der User im Hostsystem modifizieren kann).
Welche Parameter (von Benutzerseite) sind denn nötig? Mir fällt ein:
Die Logs sieht man entweder direkt in Docker oder du schreibst in ein Logfile, welches man mit herausmappen könnte.
Für Docker-Images ist zu beachten, dass diese nicht plattformunabhängig sind. Es müssten Images für amd64 und arm und co bereitgestellt werden.
Das stimmt. Ich sehe das auch eher als Alternative für die klassische JAVA-Installation. Ein Dockerimage würde wohl hauptsächlich Linux mit x86_64 adressieren. Im vorliegenden Fall könnte man wahrscheinlich auch ein plattformunabhängiges Image erstellen. Das müsste man dann in einem weiteren Schritt probieren.
Synology NAS - was ist denn das für eine Prozessor-Architektur?
Das lässt sich nicht pauschal beantworten. Die meisten Docker fähgigen Geräte haben eine x86_64 CPU. Das sind in der Regel dann die Anwender, die ihr NAS nicht nur als Datenspeicher betrachten, sondern eher als Homeserver. Inzwischen gibt es aber auch schon welche mit arm64 (also Docker kompatible). Darüber hinaus gibt es noch diverse ARM-CPUs (in der Regel bei Einstiegsgeräten) ohne Docker Support, deren Anwender wahrscheinlich nicht die Zielgruppe sind.
Es ist soweit - hier ist ein erster Aufschlag für ein Docker-Image, mit dem man den Answerbot lokal laufen lassen kann: https://hub.docker.com/r/phoneblock/answerbot
Jetzt seid Ihr am Zug... :-)
Du bist ja schneller als die Spammer 🤣
Gleich probiert und läuft 🙂 Klasse! Vielen Dank für deine Arbeit‼️
Noch eine Frage: Wie wird die FRITZ!Box adressiert? Wenn ich das richtig sehe, dann wohl über fritz.box
. Wenn man aber mehrere Geräte (in einem Netzwerk) hat, wäre es vielleicht für den einen oder anderen User günstig, hier optional die gewünschte Adresse mit übergeben zu können. #36 (3.)
Ich würde außerdem noch vorschlagen, den Docker run Befehl noch etwas anzupassen:
docker run --network=host -d --rm --name phoneblock -v $PWD/conversation:/opt/phoneblock/conversation -e "USER=phoneblock" -e "PASSWD=your-password" phoneblock/answerbot:latest
-d
läuft der Container im detached mode
, d.h. im Hintergrund--name phoneblock
ist immer praktisch, um bei Containern die Übersicht zu wahrenphoneblock/answerbot:latest
Oder als Docker-compose:
version: '3.9'
services:
phoneblock:
image: phoneblock/answerbot:latest
container_name: phoneblock
network_mode: host
environment:
- USER=phoneblock
- PASSWD=your-password
volumes:
- ./conversation:/opt/phoneblock/conversation
restart: unless-stopped
Was mir noch aufgefallen ist:
Aufnahmen werden ja sogar auch schon mit bereitgestellt. Prima – das hatte ich mir als ein Feature in der Zukunft vorgestellt. Allerdings werden diese im Rootverzeichnis des Containers abgelegt und nicht im Verzeichnis /opt/phoneblock/recordings
, weil im Konfigfile /opt/phoneblock/.phoneblock
die Zeile #recodings=/opt/phoneblock/recordings
auskommentiert ist. Gibt es dafür einen Grund?
(Wenn ich das richtig sehe, kann man das mit der nächsten Version eh überschreiben).
Ich hab jetzt mal im Compose-File die Konfiguration mit gemappt. So kann man bequem vom Host aus nötige Anpassungen vornehmen.
volumes:
- ./conversation:/opt/phoneblock/conversation
- ./recordings:/opt/phoneblock/recordings
- ./phoneblock_config.conf:/opt/phoneblock/.phoneblock
Allerdings sind in den Aufnahmen nur die Audiosegmente des Anrufers. Der Dialog durch den AB ist so nicht nachvollziehbar. Ist das eine Konfigurationsfrage?
Aktuell wird in den Recordings nur das Ankommende Audio aufgezeichnet. Es wäre aber bestimmt möglich auch das ausgehende Audio da mit aufzunehmen.
Auch in der aktuellen Version kann der Befehlt überschrieben werden. Jedoch muss hier:
java - jar /opt/phoneblock/bin/phoneblock-ab.jar -f /opt/phoneblock/.phoneblock
angegeben werden.
Auch in der aktuellen Version kann der Befehlt überschrieben werden. Jedoch muss hier:
java - jar /opt/phoneblock/bin/phoneblock-ab.jar -f /opt/phoneblock/.phoneblock
angegeben werden.
Das entspricht bei mir dem Ausführungsbefehl des aktuellen Images.
Klappt also schon mit einer angepassten /opt/phoneblock/.phoneblock
. 😊
Hallo, ich wollte es gerade mal auf meinen Raspberry Pi 4 im Docker starten, aber es wird kein passendes Plattform gefunden. Wäre es möglich noch für den Pi aarch 64 (platform (linux/arm64/v8) mit einzubauen? Das wäre echt toll.
Kann ich dann in der Config Datei auch statt der Fritz.box auch eine IP Hinterlegen? Sind die Audiofile sehr wichtig oder kann man diese auch zum Anfang weglassen?
MFG sig10680
@sig10680 Anstelle der Domain fritz.box kannst du auch die IP deines Routers eintragen. Du kannst die Audiodatei auch weglassen, dies führt aktuell aber dazu, dass der Anrufende in kein Gespräch verwickelt wird und es kann zu Fehlern im Log kommen.
Es wäre prinzipiell auch möglich Multiplattform Images bereitzustellen. Hier ist aber noch ein wenig Vorarbeit notwendig.
@hduelme Es wäre prinzipiell auch möglich Multiplattform Images bereitzustellen. Hier ist aber noch ein wenig Vorarbeit notwendig.
Kann ich da irgendwie helfen?
@sig10680 in der Dokumentation von Docker werden 3 Möglichkeiten zum Bauen für Multiplattform beschriebe. Ich denke die für dieses Projekt nützlichste Möglichkeit ist QEMU. Ich probiere das einmal aus und würde dann in meinem Merge-Request #100 eine Anleitung hinterlegen.
Sobald das Neue Image bereitgestellt ist, könntest du einmal testen, ob es für dich funktioniert und uns Feedback geben.
@hduelme Sobald das Neue Image bereitgestellt ist, könntest du einmal testen, ob es für dich funktioniert und uns Feedback geben.
Danke wenn es verfügbar ist werde ich es Testen und mich wieder melden!
Danke sig10680
Ich denke die für dieses Projekt nützlichste Möglichkeit ist QEMU
Ich wollte es gerade bei mir probieren, aber leider enthält meine Dockerinstanz kein buildx
.
Wäre das nicht der einfachste Weg, oder bin ich da zu blauäugig? Das zugrunde liegende Java-Image sollte eh mulitiarchfähig sein und sonst gibt es doch keine CPU-Abhängigkeit im Dockerfile.
docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 -t phoneblock:latest .
@geimist ich hab gerade ein Anleitung für das Nutzen von buildx
in den Merge-Request hinzugefügt. Unter Ubuntu und WSL sollte das Bauen damit funktionieren.
Was mir noch aufgefallen ist: Aufnahmen werden ja sogar auch schon mit bereitgestellt. Prima – das hatte ich mir als ein Feature in der Zukunft vorgestellt. Allerdings werden diese im Rootverzeichnis des Containers abgelegt...
Eigentlich ist die Aufnahme ein optionales Feature, das per-default ausgeschaltet ist. Das scheint aber in dem Image so nicht richtig zu funktionieren. Ob man das hierzulande überhaupt einschalten darf, weiß ich gar nicht. Verbrecher stehen ja unter Schutz und das Anfertigen eines Telefonmitschnitts würde ja ein Beweismittel erzeugen - das ist - wie die Videoaufnahme eines Taschendiebs - nur mit vorheriger Zustimmung des Verbrechers erlaubt - oder so ähnlich :-)
Dann weist man halt bei der Begrüßung darauf hin, sofern man das Feature aktiviert. Aber ja: mit Dashcams ist es ja das Gleiche. 🙈
Habe mit @hduelme 's Anleitung Images für linux/amd64, linux/arm/v7 und linux/arm64/v8 erzeugt und auf dockerhub gepusht: https://hub.docker.com/r/phoneblock/answerbot/tags
Ich werde es morgen mal auf meinen Pi testen! DANKE für die Erstellung.
Ich habe die Umgebungvariablen USER
und PASSWD
noch zu SIP_USER
und SIP_PASSWD
angepasst, um ein Clash mit der Standard-Umgebungsvariable "USER" zu vermeiden. Die Besschreibung auf https://hub.docker.com/repository/docker/phoneblock/answerbot/general ist entsprechend angepasst und ein Link zu einem Docker-Compose-Script ist hinzugefügt, mit dem man eine Vielzahl der Optionen setzen kann.
Wenn ich allerdings mehr als einen Bot auf derselben Maschine laufen lassen wollte, dann müsste ich für jeden Bot unterschiedliche Ports vergeben. In der Konfiguration kann man das anpassen, aber das EXPOSE-Kommando in dem Dockerfile kann man ja nicht mehr anpassen. Es reicht auch nicht, einfach extern die Ports umzumappen, da die Ports in die SIP-Kommunikation eingebaut werden müssen - da ist wohl noch ein offener Punkt.
Hallo, ich habe es auf meinen Raspberry getest und auf den ersten Blick läuft alles! Ausser wenn ich den Bot Intern Anrufe kommt folgende Fehlermeldung!
`[org.mjsip.ua.registration.RegistrationClient]: Registration of sip:phoneblock@192.168.0.86:50060 timed out.
[2024-11-19 09:02:34] INFO: [org.mjsip.ua.registration.RegistrationLogger]: Registration of 'sip:phoneblock@192.168.0.86:50060' failed: Timeout
[2024-11-19 09:02:34] INFO: [org.mjsip.ua.registration.RegistrationClient]: Waiting 60s for next registration of sip:phoneblock@192.168.0.86:50060.`
Das ist meine config: `version: '3.9' services: phoneblock: image: phoneblock/answerbot:latest container_name: phoneblock network_mode: host environment:
Vielleicht habt ihr eine Idee!
Was mir noch aufgefallen ist, ist das er die Porteinstellung (Host_Port=55560) nicht übernimmt im log bleibt immer das original 50060 eingestellt.
@sig10680 Ich vermute es liegt dran, dass die Default Config File Werte überschreibt.
Könntest du
command: "-f none"
für deinen Service einfügen und es nochmal ausprobieren?
@sig10680 ich konnte es selber lokal reproduzieren. Der Fehler liegt daran, dass vor und nach den =
Leerzeichen sind
@hduelme Ich vermute es liegt dran, dass die Default Config File Werte überschreibt. Könntest du command: "-f none" für deinen Service einfügen und es nochmal ausprobieren?
Wo genau soll ich das command: "-f none" eingeben? Ich steh auf den schlauch
@sig10680 eine Zeile nach Image
@hduelme das Portändern geht mit dem command aber ich kann micht nicht registrieren an der Fritzbox!
Fehlermeldung! `[org.mjsip.ua.registration.RegistrationClient]: Registration of sip:test@192.168.0.86 timed out.
[2024-11-22 09:21:23] INFO: [org.mjsip.ua.registration.RegistrationLogger]: Registration of 'sip:test@192.168.0.86' failed: Timeout
[2024-11-22 09:21:23] INFO: [org.mjsip.ua.registration.RegistrationClient]: Waiting 60s for next registration of sip:test@192.168.0.86.`
Wenn ich eine feste IP der Fritzbox eingeben will muss ich doch folgende Befehle verändern doer sehe ich das falsch! `REGISTRAR=192.168.0.200
Sieht richtig aus. Sofern du nicht die Standard-Ports nutzt, musst du noch das Port-Mapping überschreiben.
Irgendwie gehts nicht Port 5060 geht nicht aber auch diverse andere gehen nicht!
Wenn du den Container gestartet hast, könntest du docker inspect <Name deines Containers>
ausführen und das Ergebnis teilen?
@hduelme
{ "AppArmorProfile": "", "Args": [ "-jar", "/opt/phoneblock/bin/phoneblock-ab.jar", "-f", "none" ], "Config": { "AttachStderr": true, "AttachStdin": false, "AttachStdout": true, "Cmd": [ "-f", "none" ], "Domainname": "", "Entrypoint": [ "java", "-jar", "/opt/phoneblock/bin/phoneblock-ab.jar" ], "Env": [ "MEDIA_PORT=50100", "MIN_SILENCE_TIME=1500", "RECODINGS=none", "REGISTRAR=192.168.0.200", "PHONEBLOCK_PASSWORD=??????????????", "PHONEBLOCK_USERNAME=???????????, "SIP_PASSWD=??????????????", "VIA_ADDR_V6=fe80::b814:5374:32c8:8e38", "SILENCE_DB=-35", "REALM=192.168.0.200", "VIA_ADDR=192.168.0.86", "HOST_PORT=5080", "PORT_COUNT=10", "ROUTE=192.168.0.200;lr", "CONVERSATION=/opt/phoneblock/conversation", "PADDING_TIME=500", "SIP_USER=????????", "MEDIA=audio 4080 RTP/AVP { 8 PCMA 8000 160 }", "PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "JAVA_HOME=/opt/java/openjdk", "LANG=en_US.UTF-8", "LANGUAGE=en_US:en", "LC_ALL=en_US.UTF-8", "JAVA_VERSION=jdk-17.0.13+11" ], "ExposedPorts": { "50060/tcp": {}, "50060/udp": {}, "50100/udp": {}, "50101/udp": {}, "50102/udp": {}, "50103/udp": {}, "50104/udp": {}, "50105/udp": {}, "50106/udp": {}, "50107/udp": {}, "50108/udp": {}, "50109/udp": {} }, "Hostname": "RPI-4-2", "Image": "phoneblock/answerbot:latest", "Labels": { "com.docker.compose.config-hash": "7bf71b7d1557e18b810a1293dff9341acd154985806a6328a81d5460aa9272c3", "com.docker.compose.container-number": "1", "com.docker.compose.depends_on": "", "com.docker.compose.image": "sha256:96cd2d3e4d394111c1c15a7244c87f6c42d49657a0398a3dc524ea377bbfb762", "com.docker.compose.oneoff": "False", "com.docker.compose.project": "phoneblock", "com.docker.compose.project.config_files": "/data/compose/34/docker-compose.yml", "com.docker.compose.project.working_dir": "/data/compose/34", "com.docker.compose.service": "phoneblock", "com.docker.compose.version": "2.29.2", "org.opencontainers.image.authors": "play@haumacher.de", "org.opencontainers.image.ref.name": "ubuntu", "org.opencontainers.image.version": "24.04" }, "OnBuild": null, "OpenStdin": false, "StdinOnce": false, "Tty": false, "User": "phoneblock", "Volumes": null, "WorkingDir": "/opt/phoneblock/" }, "Created": "2024-11-22T08:44:58.81383506Z", "Driver": "overlay2", "ExecIDs": null, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/4a0cb4205a4b686a9bdd424d82e76c4cba77e2e269b35f9e5cf39bd023176fe4-init/diff:/var/lib/docker/overlay2/4d91981dffd8f49def2a4740eb6b51c3d54ca2330738b28e0fb9241eea02d36b/diff:/var/lib/docker/overlay2/01dd4c64bc59d52f6f603a44172d52044384b9d97c4ec3e0c9e1e6acde7c69cc/diff:/var/lib/docker/overlay2/952d2ee1f2141fa77f7de3aeef318f517d540a638176dacdf8e268d622150ded/diff:/var/lib/docker/overlay2/ba099f8b4a651e895ef79a179d2cc41b403593f3d520eeaa974e18b75bbfef46/diff:/var/lib/docker/overlay2/070c21051981255a5578af86799b348365ea272789b6b748f32117969f336982/diff:/var/lib/docker/overlay2/63cea2d70901a470fa8b8ebda2d656ec92823b3135e1386a8d40d50a5457f311/diff:/var/lib/docker/overlay2/cd296c1d012c565f5d4ae1d393100295d7ce529796091f0f9f2924efc1c1c402/diff:/var/lib/docker/overlay2/9fe32e734d302af4b171f354a37ad63869f09d679654141133ee2b405427a2fb/diff:/var/lib/docker/overlay2/1486869b73e317b5fe6bf709324633f4ed532ee11e7c59af3187f4fe1450333d/diff:/var/lib/docker/overlay2/791ec1692fe142e4d0e2c919f2927062cf76059e2c8d385c69966634fa11c0b6/diff", "MergedDir": "/var/lib/docker/overlay2/4a0cb4205a4b686a9bdd424d82e76c4cba77e2e269b35f9e5cf39bd023176fe4/merged", "UpperDir": "/var/lib/docker/overlay2/4a0cb4205a4b686a9bdd424d82e76c4cba77e2e269b35f9e5cf39bd023176fe4/diff", "WorkDir": "/var/lib/docker/overlay2/4a0cb4205a4b686a9bdd424d82e76c4cba77e2e269b35f9e5cf39bd023176fe4/work" }, "Name": "overlay2" }, "HostConfig": { "AutoRemove": false, "Binds": [ "/home/pi/docker/phoneblock_ab/conversation:/opt/phoneblock/conversation:rw", "/home/pi/docker/phoneblock_ab/recordings:/opt/phoneblock/recordings:rw" ], "BlkioDeviceReadBps": null, "BlkioDeviceReadIOps": null, "BlkioDeviceWriteBps": null, "BlkioDeviceWriteIOps": null, "BlkioWeight": 0, "BlkioWeightDevice": null, "CapAdd": null, "CapDrop": null, "Cgroup": "", "CgroupParent": "", "CgroupnsMode": "private", "ConsoleSize": [ 0, 0 ], "ContainerIDFile": "", "CpuCount": 0, "CpuPercent": 0, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpuShares": 0, "CpusetCpus": "", "CpusetMems": "", "DeviceCgroupRules": null, "DeviceRequests": null, "Devices": null, "Dns": null, "DnsOptions": null, "DnsSearch": null, "ExtraHosts": [], "GroupAdd": null, "IOMaximumBandwidth": 0, "IOMaximumIOps": 0, "IpcMode": "private", "Isolation": "", "Links": null, "LogConfig": { "Config": {}, "Type": "json-file" }, "MaskedPaths": [ "/proc/asound", "/proc/acpi", "/proc/kcore", "/proc/keys", "/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats", "/proc/sched_debug", "/proc/scsi", "/sys/firmware", "/sys/devices/virtual/powercap" ], "Memory": 0, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "NanoCpus": 0, "NetworkMode": "host", "OomKillDisable": null, "OomScoreAdj": 0, "PidMode": "", "PidsLimit": null, "PortBindings": {}, "Privileged": false, "PublishAllPorts": false, "ReadonlyPaths": [ "/proc/bus", "/proc/fs", "/proc/irq", "/proc/sys", "/proc/sysrq-trigger" ], "ReadonlyRootfs": false, "RestartPolicy": { "MaximumRetryCount": 0, "Name": "unless-stopped" }, "Runtime": "runc", "SecurityOpt": null, "ShmSize": 67108864, "UTSMode": "", "Ulimits": null, "UsernsMode": "", "VolumeDriver": "", "VolumesFrom": null }, "HostnamePath": "/var/lib/docker/containers/3ebde7ab740b1befaf5068ff53229013cf238511e3d35c9d8b8ef4a1814d0dc1/hostname", "HostsPath": "/var/lib/docker/containers/3ebde7ab740b1befaf5068ff53229013cf238511e3d35c9d8b8ef4a1814d0dc1/hosts", "Id": "3ebde7ab740b1befaf5068ff53229013cf238511e3d35c9d8b8ef4a1814d0dc1", "Image": "sha256:96cd2d3e4d394111c1c15a7244c87f6c42d49657a0398a3dc524ea377bbfb762", "LogPath": "/var/lib/docker/containers/3ebde7ab740b1befaf5068ff53229013cf238511e3d35c9d8b8ef4a1814d0dc1/3ebde7ab740b1befaf5068ff53229013cf238511e3d35c9d8b8ef4a1814d0dc1-json.log", "MountLabel": "", "Mounts": [ { "Destination": "/opt/phoneblock/conversation", "Mode": "rw", "Propagation": "rprivate", "RW": true, "Source": "/home/pi/docker/phoneblock_ab/conversation", "Type": "bind" }, { "Destination": "/opt/phoneblock/recordings", "Mode": "rw", "Propagation": "rprivate", "RW": true, "Source": "/home/pi/docker/phoneblock_ab/recordings", "Type": "bind" } ], "Name": "/phoneblock", "NetworkSettings": { "Bridge": "", "EndpointID": "", "Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "HairpinMode": false, "IPAddress": "", "IPPrefixLen": 0, "IPv6Gateway": "", "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "MacAddress": "", "Networks": { "host": { "Aliases": null, "DNSNames": null, "DriverOpts": null, "EndpointID": "c97b6d6c1a61e1eb1bbc2ce284c2bdf1824daa4bf40ebdb012008f0efa5d9eb0", "Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAMConfig": null, "IPAddress": "", "IPPrefixLen": 0, "IPv6Gateway": "", "Links": null, "MacAddress": "", "NetworkID": "e1d10c8d71ef4fb2c5d30ac2c3b120f99b22174c544b77bb13fa407a0cf474f8" } }, "Ports": {}, "SandboxID": "36b6b8efffcda8838df26cca4cbca3ddcd71f72d3928e4d919a709af3f40fd0a", "SandboxKey": "/var/run/docker/netns/default", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null }, "Path": "java", "Platform": "linux", "Portainer": { "ResourceControl": { "Id": 140, "ResourceId": "2_phoneblock", "SubResourceIds": [], "Type": 6, "UserAccesses": [], "TeamAccesses": [], "Public": false, "AdministratorsOnly": true, "System": false } }, "ProcessLabel": "", "ResolvConfPath": "/var/lib/docker/containers/3ebde7ab740b1befaf5068ff53229013cf238511e3d35c9d8b8ef4a1814d0dc1/resolv.conf", "RestartCount": 0, "State": { "Dead": false, "Error": "", "ExitCode": 0, "FinishedAt": "0001-01-01T00:00:00Z", "OOMKilled": false, "Paused": false, "Pid": 392468, "Restarting": false, "Running": true, "StartedAt": "2024-11-22T08:44:58.892625382Z", "Status": "running" } }
ich hoffe das ist alles Passwörter und Benutzer habe ich mit ????? ersetzt!
Könnte sein das die Ports nicht durchgereicht werden. Was sagt docker ps
?
Könntest du die Ports explizit eintragen und testen?
@hduelme Könntest du die Ports explizit eintragen und testen? `ports:
Könnte sein das die Ports nicht durchgereicht werden. Was sagt docker ps?
d2e7fa6b1448 phoneblock/answerbot:latest "java -jar /opt/phon…" About a minute ago Up About a minute phoneblock
Bringt irgendwie auch nix
@sig10680 Okay sollte ja auch übers Host-Netz-laufe.
Ich hab es gerade bei mir Lokal probiert.
Füge mal LOG_ALL_PACKETS=yes
hinzu.
Meine Fritz-Box verlangt als Realm fritz.box
phoneblock | Via: SIP/2.0/UDP 192.168.2.19:55060;branch=...;received=192.168.2.32
phoneblock | From: <sip:test1234@192.168.2.1>;tag=...
phoneblock | To: <sip:test1234@192.168.2.1>;tag=...
phoneblock | Call-ID: ...@192.168.2.19
phoneblock | CSeq: 1 REGISTER
phoneblock | WWW-Authenticate: Digest realm="fritz.box", nonce="..."
phoneblock | User-Agent: FRITZ!OS
phoneblock | Content-Length: 0
Damit funktioniert es bei mir. Ansonsten gerne die Ausgabe des Logs für die einzelnen Nachrichten schicken
Irgendetwas scheint mit dem aktuellen Image noch nicht zu passen. Ich hatte es nicht gleich gemerkt, weil im Log keine Fehlermeldungen zu sehen sind und ein Testanruf auch Ansagen bringt. Allerdings keine Ansagen aus dem Pool "question". Auch werden keine (aktivierten) Aufnahmen abgelegt. Das Konfigfile habe ich testweise mit "-f none" auch deaktiviert. Ich gehe davon aus, dass der AB den Anrufer gar nicht hört (keine Reaktion auf den Anrufen / keine Aufnahme).
Zum Test bin ich jetzt mal wieder auf das 1. Image zurückgewechselt (inkl. angepasstem Composefile – ich hatte mir das Image zum Glück gesichert) und da funktioniert es wieder.
@geimist die Änderung im Neuen Docker-File ist, dass der Nutzer nicht mehr Root sondern phoneblock 999 ist. Wohin mountest du die Verzeichnisse? Und darf der Nutzer 999 darauf schreiben und lesen? Wenn du die Zeile:
user: 0:0
in deine Compose-File hinzufügst, läuft der wieder als Root
Das Verzeichnis hat Schreibrechte für everyone (777). Dass der AB offensichtlich nichts hört, merkt man aber auch am Gespräch.
EDIT: Ich habe mal zum Test den Mount entfernt. Das Recordingsverzeichnis im Container bleibt auch da leer.
@hduelme hier mein log und mit realm=fritz.box
`-----End-of-message-----
[2024-11-22 12:21:44] INFO: [org.mjsip.sip.provider.SipProvider]: Sent message to: 192.168.0.200:5060/udp (477 bytes).
-----Begin-of-message-----
REGISTER sip:192.168.0.200 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.86:5060;branch=z9hG4bK754740c5
Route: <sip:192.168.0.200;lr>
Max-Forwards: 70
From: sip:xxxx@192.168.0.200;tag=585142730710
Call-ID: 588532645644@192.168.0.86
CSeq: 1 REGISTER
Contact: sip:xxxx@192.168.0.86
Expires: 3600
User-Agent: mjsip 1.9.0-SNAPSHOT
Content-Length: 0
-----End-of-message-----
[2024-11-22 12:21:44] INFO: [org.mjsip.ua.registration.RegistrationClient]: Registration of sip:xxxx@192.168.0.86 timed out.
[2024-11-22 12:21:44] INFO: [org.mjsip.ua.registration.RegistrationLogger]: Registration of 'sip:xxxx@192.168.0.86' failed: Timeout
[2024-11-22 12:21:44] INFO: [org.mjsip.ua.registration.RegistrationClient]: Waiting 60s for next registration of sip:xxxx@192.168.0.86.`
@sig10680 die Fritzbox antwortet dir nicht. Normalerweise sollte eine Bestätigung ankommen
phoneblock | [2024-11-22 12:56:46] INFO: [org.mjsip.sip.provider.SipProvider]: Received message from: 192.168.2.1:5060/udp (357 bytes).
phoneblock | -----Begin-of-message-----
phoneblock | SIP/2.0 401 Unauthorized
phoneblock | Via: SIP/2.0/UDP 192.168.2.32:55060;branch=...
phoneblock | From: <sip:test1234@192.168.2.1>;tag=...
phoneblock | To: <sip:test1234@192.168.2.1>;tag=3775650DC56F84B1
phoneblock | Call-ID: ...@192.168.2.32
phoneblock | CSeq: 1 REGISTER
phoneblock | WWW-Authenticate: Digest realm="fritz.box", nonce=".."
phoneblock | User-Agent: FRITZ!OS
phoneblock | Content-Length: 0
phoneblock |
Woraufhin es mit Username + Passwort versucht wird.
Wird auf dem Port zugehört? netstat -lntu
@geimist bei mir funktioniert es auch mit dem neuen Image. Wie sieht deine yaml aus?
@hduelme Wird auf dem Port zugehört? netstat -lntu
Ja
Ziemlich unverändert, meine ich:
version: '3.9'
services:
phoneblock:
image: phoneblock/answerbot:latest
container_name: phoneblock
# command: "-f none"
# user: 0:0
network_mode: host
environment:
# description: https://github.com/haumacher/phoneblock/blob/master/phoneblock-ab/.phoneblock.template
- SIP_USER=phoneblock
- SIP_PASSWD=xxx
- PHONEBLOCK_USERNAME=xxx
- PHONEBLOCK_PASSWORD=xxx
- VIA_ADDR=auto-configuration
- VIA_ADDR_V6=auto-configuration
- HOST_PORT=50760
- REGISTRAR=fritz.box
- ROUTE=fritz.box;lr
- REALM=fritz.box
- MEDIA=audio 4080 RTP/AVP { 8 PCMA 8000 160 }
- MIN_SILENCE_TIME=1500
- PADDING_TIME=500
- SILENCE_DB=-35
- MEDIA_PORT=50100
- PORT_COUNT=10
- RECORDINGS=/opt/phoneblock/recordings
- CONVERSATION=/opt/phoneblock/conversation
volumes:
- ./conversation:/opt/phoneblock/conversation
# - ./recordings:/opt/phoneblock/recordings
restart: on-failure:5
Wäre es nicht praktisch, ein Dockerimage zum selbshosten des ABs bereitzustellen? Ich weiß nicht, wie kompliziert eine manuelle Installation ist und wie modular die Projekte (Frontend, CardDAV-Server, AB) aufgebaut sind. Es müssten halt ein paar Umgebungsvariablen festgelegt werden können (Sip User und Kennwort könnte in dem Fall der User angeben und halt die URL zur FritzBox). Zusätzlich müsste noch ein Sync für die Spamliste implementiert werden und als opt-in ein Rückkanal, damit PhoneBlock die Trefferquote validieren kann.
einige Vorteile, die ich sehe:
nicht vertrauenswürdiges Cert der FB, ect.) #81Bitte entschuldige, falls das falsch rüberkommt: Ich möchte hier nicht fordernd auftreten. Das sind nur ein paar Gedanken und Begehrlichkeiten, die so bei einem Neueinsteiger geweckt werden 🤗