2

Ubuntu 16.04 で CAN バスに接続するためにsocketCANを使用しています。インターフェイスは私のマシンで正常に動作します。ただし、CI を開始すると、リモート エージェント (Ubuntu 16.04 も) で実行され、ソケットを作成しようとすると、アクセス許可エラーが発生します。

Traceback (most recent call last):
  File "main.py", line 20, in <module>
    from    tests_smoke             import SmokeTests
  File ".../tests_smoke.py", line 9, in <module>
    from tests.validate_can                 import ValidateCAN
  File ".../tests/validate_can.py", line 16, in <module>
    bus = can.interface.Bus(bustype='socketcan', channel='can0', bitrate=250000)
  File "/usr/local/lib/python3.5/dist-packages/can/interface.py", line 128, in __new__
    return cls(channel, *args, **config)
  File "/usr/local/lib/python3.5/dist-packages/can/interfaces/socketcan/socketcan.py", line 459, in __init__
    self.socket = create_socket()
  File "/usr/local/lib/python3.5/dist-packages/can/interfaces/socketcan/socketcan.py", line 330, in create_socket
    sock = socket.socket(PF_CAN, socket.SOCK_RAW, CAN_RAW)
  File "/usr/lib/python3.5/socket.py", line 134, in __init__
    _socket.socket.__init__(self, family, type, proto, fileno)
PermissionError: [Errno 1] Operation not permitted

Linux と Python の両方の初心者である私は、これに対処する方法について確信が持てません。これは呼び出しプロセスから継承されたファイル作成許可の問題である可能性があることをいくつかの場所で読んだので、スクリプトの先頭に「os.umask(0)」を配置しましたが、影響はありませんでした。

また、スクリプトをルートとして実行する必要があるかもしれないことも読みました。これはかなり危険に思えます。

これを修正する最善の方法は何ですか?

4

0 に答える 0