Estou com um problema ao iniciar o GPSD em um Beaglebone Green. Eu recebo um erro de ligação de soquete:
root@BBG1:/etc/init# gpsd -D3 -n -N /dev/ttyUSB0
gpsd:INFO: launching (Version 3.16)
gpsd:ERROR: can't bind to IPv4 port gpsd, Address already in use
gpsd:ERROR: maybe gpsd is already running!
gpsd:ERROR: can't bind to IPv6 port gpsd, Address already in use
gpsd:ERROR: maybe gpsd is already running!
gpsd:INFO: command sockets creation failed, netlib errors -1, -1
Parece que a questão é comum nessas placas mini dev (Raspberry Pi incluído), mas o que parece resolver o problema para a maioria das pessoas não funcionou para mim. Por mais que eu saiba, é porque systemd/init
está batendo o gspd nele.
root@BBG1:/etc/init# netstat -lnpt
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:2947 0.0.0.0:* LISTEN 1/init
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 375/connmand
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 493/sshd
tcp6 0 0 ::1:2947 :::* LISTEN 1/init
tcp6 0 0 :::8080 :::* LISTEN 631/apache2
tcp6 0 0 :::80 :::* LISTEN 1/init
tcp6 0 0 ::1:53 :::* LISTEN 375/connmand
tcp6 0 0 :::22 :::* LISTEN 493/sshd
tcp6 0 0 :::1880 :::* LISTEN 1/init
tcp6 0 0 :::3000 :::* LISTEN 1/init
Eu tentei:
- modificando
/lib/systemd/system/gpsd.socket
para alterar ListenStream
de 127.0.0.1:2947
para 0.0.0.0:2947
, mas quando eu reinicializo, init
liga-se a ele (como visto no bloco de código acima).
-
sudo killall gspd
e, em seguida, reiniciar novamente, mas isso não parece ajudar.
-
modifique /etc/default/gpsd
para o seguinte:
START_DAEMON="true"
GPSD_OPTIONS=""
DEVICES="/dev/ttyUSB0"
USBAUTO="false"
GPSD_SOCKET="/var/run/gpsd.sock"
-
um script de inicialização personalizado em /etc/rc.local
(deve atrasar a inicialização do gpsd, mas parece não estar em execução porque o arquivo startgpsd.txt nunca é atualizado)
#Start the gpsd daemon
/etc/booted/startgpsd.sh
exit 0
que aponta para startgpsd.sh
#!/bin/sh -e
#Need to wait past boot so everything is done
date "+%Y-%m-%d %H:%M:%S" > /startgpsd.txt
sleep 2
echo "Starting GPSD" >> /startgpsd.txt
/usr/local/sbin/gpsd /dev/ttyUSB0 -G -n -F /var/run/gpsd.sock
date "+%Y-%m-%d %H:%M:%S" >> /startgpsd.txt
exit 0
p
Em um ponto, quando atualizei o GSPD de v 3.11 (baixado com apt-get
) para v 3.16 (baixei o binário e um gig + de outra porcaria para que eu pudesse construí-lo) ele começou a funcionar, mas assim que eu reiniciei estava de volta ao mesmo problema.
Existe uma maneira de impedir que o systemd seja vinculado à porta para que o gpsd possa, em vez disso (ou isso é mesmo o meu problema)? Matar o PID 1 não parece ser uma coisa inteligente para fazer, então eu não tentei isso ainda. Eu estou quase no ponto de limpar tudo e começar tudo de novo, mas eu pensei que eu tentaria aproveitar o 'poder coletivo do gênio' aqui primeiro (dado que eu já encontrei várias respostas para outros problemas aqui no passado) .
Obrigado!
Editar: Adicionando o conteúdo de /lib/systemd/system/gpsd.socket
[Unit]
Description=GPS (Global Positioning System) Daemon Sockets
[Socket]
ListenStream=/var/run/gpsd.sock
ListenStream=[::1]:2947
ListenStream=0.0.0.0:2947
SocketMode=0600
[Install]
WantedBy=sockets.target