Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dockerimage #97

Open
geimist opened this issue Nov 12, 2024 · 79 comments
Open

Dockerimage #97

geimist opened this issue Nov 12, 2024 · 79 comments

Comments

@geimist
Copy link

geimist commented Nov 12, 2024

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:

  • Diese Möglichkeit würde halt ggf. bestehende Datenschutzbedenken minimieren.
  • Mit Docker als externe Installationsmöglichkeit hätte man den Vorteil, dass die Installation in sich sehr konsistent ist (das Image läuft einfach, sofern die CPU Architektur und das OS passt).
  • Senkung der Latenz / die Wahrscheinlichkeit, dass andere Telefone klingeln wird minimiert #36 (3.)
  • Kein DDNS Trouble (Zwangstrennung, DS-Lite, nicht vertrauenswürdiges Cert der FB, ect.) #81
  • Mehrere lokale FritzBoxen sind so individuell konfigurierbar #36 (3.)
  • Der IP-Fon-Anschluss der FritzBox für den AB müsste nicht aus dem Internet erreichbar gemacht werden.

Bitte 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 🤗

@Revan335
Copy link

Wie im anderen Thema bereits geschrieben, wäre das very nice!

@haumacher
Copy link
Owner

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.

@geimist
Copy link
Author

geimist commented Nov 13, 2024

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?

@haumacher
Copy link
Owner

haumacher commented Nov 14, 2024

... 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.

@haumacher
Copy link
Owner

haumacher commented Nov 14, 2024

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.

@geimist
Copy link
Author

geimist commented Nov 14, 2024

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:

  • FritzBox-URL
  • SIP-Username
  • SIP-Password
  • und ein Mount eines WAV-Files für den Ansagetext (optional mit Fallback zur aktuellen Methode).

Die Logs sieht man entweder direkt in Docker oder du schreibst in ein Logfile, welches man mit herausmappen könnte.

@hduelme
Copy link
Contributor

hduelme commented Nov 15, 2024

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.

@geimist
Copy link
Author

geimist commented Nov 15, 2024

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.

@haumacher
Copy link
Owner

Synology NAS - was ist denn das für eine Prozessor-Architektur?

@geimist
Copy link
Author

geimist commented Nov 15, 2024

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.

@haumacher
Copy link
Owner

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... :-)

@geimist
Copy link
Author

geimist commented Nov 15, 2024

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

  • mit -d läuft der Container im detached mode, d.h. im Hintergrund
  • --name phoneblock ist immer praktisch, um bei Containern die Übersicht zu wahren
  • WICHTIG: Deine Imagebezeichnung ist nicht vollständig: phoneblock/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

@geimist
Copy link
Author

geimist commented Nov 17, 2024

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?

@hduelme
Copy link
Contributor

hduelme commented Nov 17, 2024

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.

@geimist
Copy link
Author

geimist commented Nov 17, 2024

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. 😊

@sig10680
Copy link

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

@hduelme
Copy link
Contributor

hduelme commented Nov 18, 2024

@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.

@sig10680
Copy link

@hduelme Es wäre prinzipiell auch möglich Multiplattform Images bereitzustellen. Hier ist aber noch ein wenig Vorarbeit notwendig.

Kann ich da irgendwie helfen?

@hduelme
Copy link
Contributor

hduelme commented Nov 18, 2024

@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.

@sig10680
Copy link

@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

@geimist
Copy link
Author

geimist commented Nov 18, 2024

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 .

@hduelme
Copy link
Contributor

hduelme commented Nov 18, 2024

@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.

@haumacher
Copy link
Owner

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 :-)

@geimist
Copy link
Author

geimist commented Nov 18, 2024

Dann weist man halt bei der Begrüßung darauf hin, sofern man das Feature aktiviert.
Aber ja: mit Dashcams ist es ja das Gleiche. 🙈

@haumacher
Copy link
Owner

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

@sig10680
Copy link

Ich werde es morgen mal auf meinen Pi testen! DANKE für die Erstellung.

@haumacher
Copy link
Owner

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.

@geimist
Copy link
Author

geimist commented Nov 18, 2024

Prima - läuft 👌
Was mir aufgefallen ist: in dem Composefile ist die Zeile 16 ein Duplikat von Zeile 10.

@sig10680
Copy link

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: - VIA_ADDR=192.168.0.86 - VIA_ADDR_V6=fe80::b814:5374:32c8:8e38 - HOST_PORT=50060 - REGISTRAR=192.168.0.200 - ROUTE=192.168.0.200;lr - REALM=192.168.0.200 - SIP_USER=phoneblock - SIP_PASSWD=123456 - PHONEBLOCK_USERNAME=123456 - PHONEBLOCK_PASSWORD=123456 - 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 - RECODINGS=none - CONVERSATION=/opt/phoneblock/conversation - TZ=Europe/Berlin volumes: - /home/pi/docker/phoneblock_ab/conversation:/opt/phoneblock/conversation - /home/pi/docker/phoneblock_ab/recordings:/opt/phoneblock/recordings restart: unless-stopped

Vielleicht habt ihr eine Idee!

@hduelme
Copy link
Contributor

hduelme commented Nov 22, 2024

@geimist du hast recht ist ein Fehler aus eeb3adb
Wird behoben

@geimist
Copy link
Author

geimist commented Nov 22, 2024

Aber müsste es nicht gehen, wenn ich RECODINGS setze?

@hduelme
Copy link
Contributor

hduelme commented Nov 22, 2024

Aber müsste es nicht gehen, wenn ich RECODINGS setze?

Ja

@geimist
Copy link
Author

geimist commented Nov 22, 2024

Aber tut es ja auch nicht 🤷‍♂️
Wie gesagt: mit dem alten Image geht's.
Ich hab gerade auch keine Idee, wie ich das noch etwas besser debuggen kann.

@geimist
Copy link
Author

geimist commented Nov 22, 2024

Wenn ich das Konfigfile mounte, funktioniert es:

version: '3.9'

services:
  phoneblock:
    image: phoneblock/answerbot:latest
    container_name: phoneblock
    network_mode: host
    environment:
      - SIP_USER=phoneblock
      - SIP_PASSWD=xxx
    volumes:
      - ./conversation:/opt/phoneblock/conversation
      - ./phoneblock_config.conf:/opt/phoneblock/.phoneblock
    restart: on-failure:5

phoneblock_config.conf:

host-port=50060
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
recodings=/opt/phoneblock/recordings
conversation=/opt/phoneblock/conversation

@sig10680
Copy link

@hduelme ich teste mal mit einer anderen Fritzbox und melde mich wieder.

@geimist
Copy link
Author

geimist commented Nov 22, 2024

@hduelme

Edit 2:

wenn ich command: "-f none" setze, funktioniert der Spracheingang / Aufnahme zum AB auch (sorry, hatte eigentlich gemeint, es schon versucht zu haben). Demnach würde ich vermuten, das die Umgebungsvariablen die Werte der Standardkonfiguration des internen Konfigfiles nicht korrekt überschreiben. Das deckt sich ja auch mit der Änderung des Dockerimages welche zu dem Break bei mir führten.

@hduelme
Copy link
Contributor

hduelme commented Nov 22, 2024

@geimist genau das ist auch meine Vermutung. Daher habe ich etwas mehr Diagnose im 2. verlinkten Merge-Request eingebaut.

@haumacher
Copy link
Owner

haumacher commented Nov 22, 2024

Vielen Dank für die Analyse. Ich glaube das eigentliche Problem habe ich in der late-night-docker-build-aktion haumacher/mjSIP@3e10ba0 eingebaut und jetzt hoffentlich mit haumacher/mjSIP@9bb3532 behoben. Das Problem war, dass immer dann, wenn ein Konfigurationsfile angegeben wurde, die Umgebungsvariablen ignoriert (bzw. durch das Konfigurationsfile überschrieben) wurden.

Das andere Problem, dass der AB nicht richtig zuhört, wenn er nicht auch aufzeichnet ist hiermit behoben: 8661f6e

Ich habe das Docker-Image aktualisiert - wer noch nicht müde ist vom Testen, der kann es nochmal probieren :-)

@geimist
Copy link
Author

geimist commented Nov 22, 2024

Läuft – vielen Dank 😊

@sig10680
Copy link

Bei mir geht es jetzt auch. Sehr fein! Danke für die Unterstützung!
Wie erstellt ihr eigentlich die wav Dateien?

@haumacher
Copy link
Owner

Audacity kann das ganz gut: https://www.audacityteam.org/

@sig10680
Copy link

@haumacher Danke das Teste ich mal.

@geimist
Copy link
Author

geimist commented Nov 22, 2024

Wie erstellt ihr eigentlich die wav Dateien?

Mein Weg ging über eine Aufnahme mit allen Sätzen einer Gruppe in OcenAudio.
Anschließend AuswählenStilleAuswahl umkehrenAuswahlen speichern

Konvertierung der Schnipsel ins passende Format dann mit ffmpeg:
Kurzform:
ffmpeg -i input_file -c:a pcm_alaw -ar 8000 -ac 1 output_file

Langform (als Bash)
Ganze Ordner werden als Parameter an das Skript übergeben.

#!/bin/bash

# Prüfen, ob ein Ordner als Parameter übergeben wurde
if [ -z "$1" ]; then
    echo "Bitte einen Ordner als Parameter angeben."
    exit 1
fi

INPUT_DIR="$1"

# Prüfen, ob der angegebene Ordner existiert
if [ ! -d "$INPUT_DIR" ]; then
    echo "Der Ordner '$INPUT_DIR' existiert nicht."
    exit 1
fi

# Funktion, um eindeutigen Dateinamen zu erstellen
generate_unique_filename() {
    local dir="$1"
    local base_name="$2"
    local extension="$3"
    local counter=1
    local new_name="${base_name}.${extension}"

    while [ -e "$dir/$new_name" ]; do
        new_name="${base_name}_$counter.${extension}"
        ((counter++))
    done

    echo "$new_name"
}

# Schleife durch alle Audiodateien im Ordner
for file in "$INPUT_DIR"/*.{mp3,flac,wav,m4a,ogg}; do
    # Prüfen, ob Datei existiert
    [ -e "$file" ] || continue

    # Extrahiere Dateinamen ohne Erweiterung
    base_name=$(basename "$file" | sed 's/\.[^.]*$//')
    output_file=$(generate_unique_filename "$INPUT_DIR" "$base_name" "wav")

    echo "Konvertiere: $file -> $INPUT_DIR/$output_file"

    # Konvertierung mit ffmpeg
    ffmpeg -i "$file" -c:a pcm_alaw -ar 8000 -ac 1 "$INPUT_DIR/$output_file"
done

echo "Konvertierung abgeschlossen."

@sig10680
Copy link

So habe jetzt ein paar wav Dateien erstellt. Er spielt aber nur immer die hallo wav ab. Mehr nicht. Habe aber auch eine Fehlermeldung im log. INFO: [org.mjsip.media.AudioStreamer]: Exception.: java.io.IOException: cannot read a single byte if frame size > 1

@haumacher
Copy link
Owner

Du musst die WAVs in Verzeichnisse einsortieren, wie hier beschrieben: https://github.com/haumacher/phoneblock/tree/master/phoneblock-ab/conversation

Er nimmt immer zufällig eine Datei aus dem Verzeichnis, das zu seinem "Gesprächszustand" passt.

@sig10680
Copy link

@haumacher ich habe in jeden Verzeichnis mehrere Audio files aber er nimmt nur immer die hello danach kommt nur Stille oder das rauschen file

@bjoern-vh
Copy link

Ich bekomme leider keinen Zugriff aufs Internet und der Container startet alle paar Sekunden neu.

Als Vorlage habe ich die aktuelle docker compose YAML-Datei aus dem Repository genommen und mit meinen Daten entsprechend angepasst.

Das steht jeweils in den Logs (Zugangsdaten habe ich unkenntlich gemacht):

phoneblock  | [2024-12-16 11:37:58] INFO: [de.haumacher.phoneblock.answerbot.AnswerBot]: AnswerBot 1.5.0-SNAPSHOT
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--via-addr' from environment: VIA_ADDR=auto-configuration
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--via-addr-v6' from environment: VIA_ADDR_V6=auto-configuration
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--host-port' from environment: HOST_PORT=50060
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--media' from environment: MEDIA=audio 4080 RTP/AVP { 8 PCMA 8000 160 }
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--conversation' from environment: CONVERSATION=/opt/phoneblock/conversation
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--recordings' from environment: RECORDINGS=10
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--test-prefix' from environment: TEST_PREFIX=###
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--min-silence-time' from environment: MIN_SILENCE_TIME=1500
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--padding-time' from environment: PADDING_TIME=500
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--silence-db' from environment: SILENCE_DB=-35
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--phoneblock-username' from environment: PHONEBLOCK_USERNAME=###
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--phoneblock-password' from environment: PHONEBLOCK_PASSWORD=###
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--registrar' from environment: REGISTRAR=fritz.box
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--route' from environment: ROUTE=fritz.box;lr
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--sip-user' from environment: SIP_USER=phoneblock
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--sip-passwd' from environment: SIP_PASSWD=###
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--realm' from environment: REALM=fritz.box
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--media-port' from environment: MEDIA_PORT=50100
phoneblock  | [2024-12-16 11:37:58] INFO: [org.mjsip.config.OptionParser]: Using '--port-count' from environment: PORT_COUNT=10
phoneblock  | Exception in thread "main" java.io.UncheckedIOException: java.net.SocketException: Network is unreachable
phoneblock  | 	at java.base/sun.nio.ch.DatagramSocketAdaptor.connect(DatagramSocketAdaptor.java:120)
phoneblock  | 	at java.base/java.net.DatagramSocket.connect(DatagramSocket.java:474)
phoneblock  | 	at org.zoolu.net.IpAddress.getLocalHostAddress(IpAddress.java:152)
phoneblock  | 	at org.mjsip.sip.provider.SipConfig.normalize(SipConfig.java:217)
phoneblock  | 	at de.haumacher.phoneblock.answerbot.AnswerBot.main(AnswerBot.java:391)
phoneblock  | Caused by: java.net.SocketException: Network is unreachable
phoneblock  | 	at java.base/sun.nio.ch.Net.connect0(Native Method)
phoneblock  | 	at java.base/sun.nio.ch.Net.connect(Net.java:579)
phoneblock  | 	at java.base/sun.nio.ch.DatagramChannelImpl.connect(DatagramChannelImpl.java:1249)
phoneblock  | 	at java.base/sun.nio.ch.DatagramSocketAdaptor.connectInternal(DatagramSocketAdaptor.java:91)
phoneblock  | 	at java.base/sun.nio.ch.DatagramSocketAdaptor.connect(DatagramSocketAdaptor.java:118)
phoneblock  | 	... 4 more

Der Container läuft auf einem Proxmox-Server in einer Virtuellen Maschine mit Debian 12. Andere Container laufen problemlos. Ich dachte, es hätte irgendwas mit Proxmox zu tun, aber wenn ich testweise ein Ubuntu im Netzwerk-Modus host laufen lasse, habe ich auch Internetzugriff. Was übersehe ich hier?

Danke schon mal im Voraus!

@geimist
Copy link
Author

geimist commented Dec 16, 2024

Den Fehler habe ich auch in einer Installation und konnte ihn noch nicht eingrenzen. In anderen parallelen (ziemlich identischen Setups) funktioniert es einwandfrei.
Container läuft im Host-Mode und Firewall ist deaktiviert und dennoch bekomme ich Network is unreachable.

@sig10680
Copy link

@bjoern-vh

Hallo den Fehler hatte ich auch.
Ich habe dann die IP des Computers fest hinterlegt wo das Image läuft!

VIA_ADDR=auto-configuration zb. 192.168.0.1
VIA_ADDR_V6=auto-configuration zb. ipv6 adresse

Vielleicht ist es ja auch das Problem wie bei mir.

mfg Sig10680

@geimist
Copy link
Author

geimist commented Dec 16, 2024

Ich habe dann die IP des Computers fest hinterlegt wo das Image läuft!

Das wars.
Prima. Vielen Dank. 😊

@bjoern-vh
Copy link

@sig10680 Jep, bei mir auch. Ganz lieben Dank!

@sig10680
Copy link

Kein Problem dafür sind wir doch da um uns untereinander zu helfen!

@mhoerche
Copy link

Ich bekomme leider diese Fehlermeldung beim starten (ubuntu 24.04 LXC Container auf Proxmox):

phoneblock | Exception in thread "main" java.io.UncheckedIOException: java.net.SocketException: Network is unreachable
phoneblock | at java.base/sun.nio.ch.DatagramSocketAdaptor.connect(DatagramSocketAdaptor.java:120)
phoneblock | at java.base/java.net.DatagramSocket.connect(DatagramSocket.java:474)
phoneblock | at org.zoolu.net.IpAddress.getLocalHostAddress(IpAddress.java:152)
phoneblock | at org.mjsip.sip.provider.SipConfig.normalize(SipConfig.java:217)
phoneblock | at de.haumacher.phoneblock.answerbot.AnswerBot.main(AnswerBot.java:391)
phoneblock | Caused by: java.net.SocketException: Network is unreachable
phoneblock | at java.base/sun.nio.ch.Net.connect0(Native Method)
phoneblock | at java.base/sun.nio.ch.Net.connect(Net.java:579)
phoneblock | at java.base/sun.nio.ch.DatagramChannelImpl.connect(DatagramChannelImpl.java:1249)
phoneblock | at java.base/sun.nio.ch.DatagramSocketAdaptor.connectInternal(DatagramSocketAdaptor.java:91)
phoneblock | at java.base/sun.nio.ch.DatagramSocketAdaptor.connect(DatagramSocketAdaptor.java:118)
phoneblock | ... 4 more
phoneblock exited with code 1

@bjoern-vh
Copy link

In manchen Templates ist wohl das Netzwerk nicht gestartet. Daher erst Mal das hier in deinem LXC-Container versuchen:

systemctl enable systemd-networkd.service
systemctl start systemd-networkd.service

Was ich mir auch vorstellen könnte ist, dass die Berechtigungen für den Zugriff auf das Netzwerk des Host nicht ausreichend sind. Eventuell mal bei den Optionen des LXC-Containers herumspielen. "Geschützt" und "Unprivilegiert" auf aus.

@haumacher
Copy link
Owner

Ich bekomme leider diese Fehlermeldung beim starten (ubuntu 24.04 LXC Container auf Proxmox):

@mhoerche Der Fehler kommt aus der Autokonfiguration, wenn der AB versucht, seine IP-Adresse herauszufinden. Probier die mal festzulegen:

VIA_ADDR=...
VIA_ADDR_V6=...

Siehe #97 (comment)

@mhoerche
Copy link

mhoerche commented Dec 31, 2024

Ich teste mal die Tage. Zumindest ist der Netzwerkfehler nun weg.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants