Installation von mit systemd (kein inetd oder xinetd) - saned verweigert die Verbindung

5561
emk2203

Ich habe ein Raspberry Pi B v1 mit einem minimalen Jessie-Bild eingerichtet und für das Drucken über Tassen und das Scannen über Saned konfiguriert.

Das lokale Setup ist ohne Probleme. ein

pi@EMK-RPiBv1:~$ scanimage -L device 'fujitsu:ScanSnap S1500:25959' is a FUJITSU ScanSnap S1500 scanner

Der Scanner ist jedoch im Netzwerk nicht sichtbar. ein scanimage -Lauf einem anderen Rechner zeigt emk2203@XPS12-9Q33:~$ scanimage -L device 'hpaio:/net/HP_LaserJet_CM1415fn?ip=192.168.1.30' is a Hewlett-Packard HP_LaserJet_CM1415fn all-in-one device 'hpaio:/net/HP_Officejet_Pro_276dw_MFP?ip=192.168.1.40' is a Hewlett-Packard HP_Officejet_Pro_276dw_MFP all-in-one

Also, das scanimage -Lfunktioniert - es findet die beiden anderen vernetzten Scanner, nicht aber den am Raspi angeschlossenen Scanner.

Wenn ich netstat -tulpnauf dem Pi aussteige und den Status von saned.serviceund überprüfe saned.socket, bekomme ich

pi@EMK-RPiBv1:~$ netstat -tulpn (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -  tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN -  tcp6 0 0 :::6566 :::* LISTEN -  tcp6 0 0 :::22 :::* LISTEN  tcp6 0 0 :::631 :::* LISTEN  udp 0 0 0.0.0.0:42976 0.0.0.0:*  udp 0 0 0.0.0.0:5353 0.0.0.0:*  udp 0 0 0.0.0.0:29987 0.0.0.0:*  udp 0 0 0.0.0.0:68 0.0.0.0:*  udp 0 0 192.168.1.34:123 0.0.0.0:* -  udp 0 0 127.0.0.1:123 0.0.0.0:*-  udp 0 0 0.0.0.0:123 0.0.0.0:*-  udp6 0 0 :::35810 :::* -  udp6 0 0 :::5353 :::* -  udp6 0 0 :::49009 :::* -  udp6 0 0 fe80::ba27:ebff:fe4:123 :::* -  udp6 0 0 2a02:8070:a182:ce00:123 :::* -  udp6 0 0 ::1:123 :::* -  udp6 0 0 :::123 :::* -   pi@EMK-RPiBv1:~$ systemctl status saned.socket ● saned.socket - saned incoming socket Loaded: loaded (/lib/systemd/system/saned.socket; enabled) Active: active (listening) since Sun 2015-10-11 20:01:52 CEST; 2min 18s ago Listen: [::]:6566 (Stream) Accepted: 0; Connected: 0  pi@EMK-RPiBv1:~$ systemctl status saned.service ● saned.service - LSB: SANE network scanner server Loaded: loaded (/etc/init.d/saned) Active: active (exited) since Sun 2015-10-11 20:01:53 CEST; 2min 26s ago Process: 342 ExecStart=/etc/init.d/saned start (code=exited, status=0/SUCCESS) 

Der offene Port wird nur für tcp6 angezeigt, aber pi@EMK-RPiBv1:~$ sudo sysctl net.ipv6.bindv6onlyich bekomme net.ipv6.bindv6only = 0- das sollte kein Problem sein, da ipv6 nicht nur an v6 gebunden ist, sondern auch ipv4 enthält.

Aber wenn ich versuche, in den offenen Port des Pi zu telnet, wird die Verbindung abgelehnt :

pi@EMK-RPiBv1:~$ telnet localhost 6566 Trying ::1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host. 

Dies zeigt an, dass ich meine Sanierten nicht erreichen kann.

Wenn ich den systemd-Dienst und den Socket für saniert abschalte und versuche zu debuggen, erhalte ich Folgendes:

root@EMK-RPiBv1:~# systemctl stop saned.service root@EMK-RPiBv1:~# systemctl stop saned.socket root@EMK-RPiBv1:~# lsof -i :6566 

Also nichts im Moment zu hören - keine Ausgabe.

root@EMK-RPiBv1:~# saned -d128 -a saned [saned] main: starting debug mode (level 128) [saned] read_config: searching for config file [saned] read_config: done reading config [saned] saned (AF-indep+IPv6) from sane-backends 1.0.24 starting up [saned] do_bindings: trying to get port for service "sane-port" (getaddrinfo) [saned] do_bindings: [1] socket () using IPv6 [saned] do_bindings: [1] setsockopt () [saned] do_bindings: [1] bind () to port 6566 [saned] do_bindings: [1] listen () [saned] do_bindings: [0] socket () using IPv4 [saned] do_bindings: [0] setsockopt () [saned] do_bindings: [0] bind () to port 6566 [saned] do_bindings: [0] bind failed: Address already in use [saned] run_standalone: spawning Avahi process [saned] run_standalone: waiting for control connection [saned] saned_avahi_callback: AVAHI_CLIENT_S_RUNNING [saned] saned_create_avahi_services: adding service 'saned' [saned] saned_avahi_group_callback: service 'saned' successfully established 

Was muss ich tun, um die Verbindung zu öffnen? Bitte nicht inetd oder xinetd installieren. Dies sollte mit systemd alleine funktionieren.

2

2 Antworten auf die Frage

1
grawity

Aber wenn ich versuche, in den offenen Port des Pi zu telnet, wird die Verbindung abgelehnt:

pi@EMK-RPiBv1:~$ telnet localhost 6566 Trying ::1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host. 

Aber es wird nicht abgelehnt . Wenn dies der Fall ist, wird "Verbindung abgelehnt" angezeigt. Hier steht aber eindeutig "Verbunden" - die Verbindung wurde angenommen und dann vom eigentlichen Dienst geschlossen.

Wie auch immer: Ich kann zwei Probleme erraten:

  1. Bei einer solchen inetd-ähnlichen Socket-Aktivierung wird der sanierte Dienst erst ausgeführt, wenn versucht wird, eine Verbindung herzustellen . Daher kann es auch nicht in den Scanergebnissen angezeigt werden (da es während des Scans nicht läuft). Stattdessen müssen Sie ihn möglicherweise als permanenten Dienst ausführen, nicht als Socket-aktivierten Dienst.

  2. Ihr saned.serviceist kein echter Systemdienst. Es wurde automatisch aus /etc/init.d/saned konvertiert (wie das Präfix "LSB:" zeigt). Da die init.d-Konvertierung viele seltsame Randfälle bewältigen muss, führt dies manchmal zu Diensten, die kaum funktionieren - insbesondere in Kombination mit der Socket-Aktivierung. Daher sollten Sie es vermeiden, die systemeigenen Einheiten und die LSB-konvertierten Einheiten gleichzeitig zu starten.

Ihre Beobachtung des Telnet-Verhaltens in Verbindung mit 2. war genau richtig und half mir, das Problem zu bestimmen. Die ordnungsgemäße Systemzusammenarbeit findet in SANE 1.0.25 statt, SANE 1.0.24 hat noch Probleme. Weitere Informationen zu [SANE Bug Tracker] (https://alioth.debian.org/tracker/index.php?func=detail&aid=314883). Kurz gesagt, `libsystemd-dev` muss installiert sein, damit der systemd-Kleber funktioniert und der` saned.service` so bearbeitet wird, dass er mit dem Vorschlag der Manpage für 1.0.25 übereinstimmt: [1.0.25 Manpage] (https: // bugzilla.redhat.com/attachment.cgi?id=1076042). Außerdem muss `/ etc / default / saned` RUN = no` enthalten, sonst schlägt der Dienst fehl. emk2203 vor 8 Jahren 1
Das gleiche bleibt, dass die SANE-Serveradresse oder der vollqualifizierte Domänenname explizit in der `/ etc / sane.d / net.conf` auf dem Client sein muss. emk2203 vor 8 Jahren 0
1
emk2203

Die ordnungsgemäße Systemzusammenarbeit findet in SANE 1.0.25 statt, SANE 1.0.24 hat noch Probleme. Weitere Informationen zum SANE Bug Tracker . Um mit systemd arbeiten zu können, sollte man entweder die Version 1.0.25 von sane-utils verwenden (nicht in Raspbian Jessie) oder die Version 1.0.24 anpassen.

Kurz gesagt, libsystemd-devmuss installiert sein, damit der systemd-Kleber funktionieren kann, und er muss so saned.servicebearbeitet werden, dass er mit dem Manpage-Vorschlag für die Manpage 1.0.25: 1.0.25 übereinstimmt .

Man Page für 1.0.25

Die Systemd-Konfiguration bei Saned wird ohne Systemd-Unterstützung kompiliert

Diese Konfiguration funktioniert auch, wenn Saned MIT Unterstützung der systemd-Integration kompiliert wird. Debugging-Informationen können jedoch nicht protokolliert werden.

saned.socket (unverändert)

[Unit] Description=saned incoming socket  [Socket] ListenStream=6566 Accept=yes MaxConnections=1  [Install] WantedBy=sockets.target 

saned@.service(geändert, funktioniert auch, wenn der systemdSupport kompiliert ist, aber keine Protokollierung der Debugging-Informationen möglich ist)

[Unit] Description=Scanner Service Requires=saned.socket  [Service] ExecStart=/usr/sbin/saned User=saned Group=saned StandardInput=socket  Environment=SANE_CONFIG_DIR=/etc/sane.d  [Install] Also=saned.socket 

Sie können auch Alias=saned.servicedie letzte Installationszeilengruppe danach Also=saned.socketeingeben, damit beide gesicherten Verweise mit dem gleichen sanierten beginnen. *

Außerdem /etc/default/sanedmuss enthalten RUN=nooder der Dienst nicht, und als Erinnerung, die saned - Server - Adresse oder FQDN (nicht nur der Servername) muss gesetzt in wird /etc/sane.d/net.confauf allen Client - Rechnern.