web-dev-qa-db-ja.com

systemdを使用したsanedのインストール(inetdまたはxinetdなし)-sanedは接続を拒否します

最小限のジェシー画像を使用してRaspberryPi B v1をセットアップし、カップを介して印刷し、sanedを介してスキャンするように構成しました。

ローカルセットアップには問題はありません。 A

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

ただし、スキャナーはネットワーク上に表示されません。別のマシンのscanimage -Lemk2203@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を示します

したがって、scanimage -Lは機能します-他の2つのネットワークスキャナーを検出しますが、not Raspiに接続されたスキャナーです。

Piでnetstat -tulpnを発行し、saned.servicesaned.socketのステータスを確認すると、次のようになります。

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)

開いているポートはtcp6についてのみ表示されますが、pi@EMK-RPiBv1:~$ Sudo sysctl net.ipv6.bindv6onlyによるとnet.ipv6.bindv6only = 0が表示されます。ipv6はv6だけでなく、ipv4も含まれているため、これは問題にはなりません。

しかし、piの開いているポートにtelnetで接続しようとすると、接続は拒否:になります。

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

これは、私が自分のsanedに到達できないことを示しています。

Sanedのsystemdサービスとソケットを強制終了してデバッグしようとすると、次のようになります。

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

したがって、現時点では何もリッスンしていません-出力はありません。

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

接続を開くには何をする必要がありますか? inetdまたはxinetdをインストールせずにお願いします。これはsystemdだけで機能するはずです。

3
emk2203

適切なsystemdの連携はSANE 1.0.25、SANE 1.0.24に問題が残っています。詳細 SANEバグトラッカー 。 systemdで作業するのをやめさせるには、sane-utils 1.0.25バージョン(Raspbian Jessieにはない)を使用するか、1.0.24バージョンを調整する必要があります。

つまり、systemdグルーを機能させるには、libsystemd-devをインストールする必要があり、saned.serviceは、1.0.25のmanページの提案に一致するように編集されます。 1.0.25 man page

1.0.25のマニュアルページ

Saned時のsystemd構成はsystemdサポートなしでコンパイルされます

この構成は、Sanedがsystemd統合サポート付きでコンパイルされている場合にも機能しますが、デバッグ情報をログに記録することはできません。

saned.socket(変更なし)

[Unit]
Description=saned incoming socket

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

[Install]
WantedBy=sockets.target

[email protected](変更、systemdサポートがコンパイルされている場合にも機能しますが、デバッグ情報のログ記録は許可されません)

[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

Alias=saned.serviceの後の最後のインストールスタンザにAlso=saned.socketを入力して、両方のsaned参照を同じsanedで開始することもできます。*

また、/etc/default/sanedにはRUN=noを含める必要があります。そうしないと、サービスが失敗します。注意として、sanedサーバーアドレスまたは[〜#〜] fqdn [〜#〜] (サーバー名だけでなく)すべてのクライアントマシンの/etc/sane.d/net.confに入力する必要があります。

2
emk2203

しかし、piの開いているポートにtelnetで接続しようとすると、接続が拒否されます。

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

しかし、ええと、拒否されていません。そうである場合は、「接続が拒否されました」と表示されます。ただし、ここでは「接続済み」と明確に示されています。接続はacceptedであり、実際のサービスによって閉じられました。

とにかく:私は2つの問題を推測することができます:

  1. このようなinetdのようなソケットアクティベーションでは、sanedサービスは実行されていません接続が試行されるまで。したがって、スキャン結果にも表示されません(スキャン中に実行されていないため)。したがって、代わりに、ソケットでアクティブ化されるサービスではなく、永続的なサービスとして実行する必要がある場合があります。

  2. 君の saned.serviceは実際のsystemdサービスではありません。 /etc/init.d/sanedから自動的に変換されました(「LSB:」プレフィックスが示すように)。 init.d変換は多く奇妙なエッジケースを処理する必要があるため、ソケットのアクティブ化と組み合わせると、サービスがほとんど機能しない場合があります– 特に。したがって、sanedのnative-systemdユニットとLSB変換ユニットを同時に起動することは避けてください。

1
user1686