Ошибка разрешения Python при создании сокета в Ubuntu
Я использую socketCAN для взаимодействия с шиной CAN в Ubuntu 16.04. Интерфейс отлично работает на моей машине. Однако, когда я запускаю наш 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)" в начале скрипта, и это не оказало никакого влияния.
Я также читал, что может потребоваться запустить скрипт от имени пользователя root. Это кажется довольно рискованным.
Каков наилучший способ исправить это?