Instalación de saned con systemd (sin inetd o xinetd) - saned rechaza la conexión

Instalación de saned con systemd (sin inetd o xinetd) - saned rechaza la conexión

Configuré una Raspberry Pi B v1 con una imagen mínima de Jessie y la configuré para imprimir mediante tazas y escanear mediante saned.

La configuración local no presenta problemas; a

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

Sin embargo, el escáner no es visible en la red. a scanimage -Len otra máquina muestra 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

Entonces, scanimage -Lfunciona: encuentra los otros dos escáneres en red, peronoel escáner conectado al Raspi.

Si emito netstat -tulpnen el pi y verifico el estado de saned.servicey saned.socket, obtengo

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)

El puerto abierto se muestra solo para tcp6, pero según pi@EMK-RPiBv1:~$ sudo sysctl net.ipv6.bindv6onlytengo entendido net.ipv6.bindv6only = 0, esto no debería ser un problema, ya que ipv6 no está vinculado solo a v6, sino que también incluye ipv4.

Pero cuando intento hacer telnet en el puerto abierto del pi, la conexión esrechazado:

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

Esto indica que no puedo alcanzar mi saned.

Si elimino el servicio systemd y el socket de saned e intento depurarlo, obtengo lo siguiente:

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

Entonces, no hay nada escuchando en este momento, no hay salida.

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

¿Qué necesito hacer para abrir la conexión? Sin instalar inetd ni xinetd por favor. Esto debería funcionar solo con systemd.

Respuesta1

La cooperación apropiada con systemd está en SANE 1.0.25, SANE 1.0.24 tiene problemas pendientes. Más enRastreador de errores SANE. Para acostumbrarse a trabajar con systemd, se debe usar la versión sane-utils 1.0.25 (no en Raspbian Jessie) o hacer ajustes a la versión 1.0.24.

En resumen, libsystemd-deves necesario instalarlo para que systemd pegamento funcione y editarlo saned.servicepara que coincida con la sugerencia de la página de manual para 1.0.25:1.0.25 página de manual.

Página de manual para 1.0.25

Configuración de systemd cuando saned se compila sin soporte de systemd

Esta configuración también funcionará cuando Saned se compila CON soporte de integración systemd, pero no permite que se registre información de depuración.

saned.socket(sin alterar)

[Unit]
Description=saned incoming socket

[Socket]
ListenStream=6566
Accept=yes
MaxConnections=1

[Install]
WantedBy=sockets.target

[email protected](cambiado, funciona también si systemdel soporte está compilado, pero no permite el registro de información de depuración)

[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

También puede ingresar Alias=saned.servicela última estrofa de instalación después Also=saned.socketpara que ambas referencias saned comiencen con el mismo saned.*

Además, /etc/default/saneddebe contener RUN=noo el servicio falla y, como recordatorio, la dirección del servidor saneada oFQDN(no solo el nombre del servidor) debe ingresarse /etc/sane.d/net.confen todas las máquinas cliente.

Respuesta2

Pero cuando intento hacer telnet en el puerto abierto del pi, la conexión se rechaza:

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

Pero, em,no es rechazado. Si así fuera, verías "Conexión rechazada". Pero aquí dice claramente "Conectado": la conexión fueaceptadoy luego cerrado por el servicio real.

De todos modos: puedo adivinar dos problemas:

  1. Con una activación de socket tipo inetd como esta, el servicio saned no se está ejecutandohasta que se intente una conexión. Por lo tanto, tampoco puede aparecer en los resultados del análisis (ya que no se ejecuta durante el análisis). Por lo tanto, es posible que deba ejecutarlo como un servicio permanente, no como uno activado por socket.

  2. Su saned.serviceno es un servicio systemd real; se convirtió automáticamente desde /etc/init.d/saned (como muestra el prefijo "LSB:"). Como la conversión init.d necesita manejarmuchoscasos extremos extraños, a veces resulta en servicios que apenas funcionan –especialmentecuando se combina con la activación del enchufe. Por lo tanto, debe evitar iniciar las unidades systemd nativas de saned y las unidades convertidas a LSB al mismo tiempo.

información relacionada