Actualização automática do linbpq

Requisitos:
– linbpq instalado em qualquer distribuição linux, incluso em raspberry pi
– linbpq a correr como serviço, descrito no final deste post

Encontrei esta ideia em https://packet-radio.net/update-linbpq-with-up2bpq/ mas, falhava sob determinadas circunstâncias e fui melhorando ao longo do tempo…
Por exemplo, o script original não via 2 updates no mesmo dia, por vezes necessário para corrigir problemas detectados pelos utilizadores, no lançamento de uma nova versão beta.

Este script corrige este problema ao utilizar o timestamp, com horas e minutos. Irá guardar também todas as versões actualizadas, caso pretendamos voltar atrás, e fazer um downgrade, por uma qualquer funcionalidade perdida.

Recordo que no meu caso, tenho o linbpq instalado num raspberry pi no directório /usr/local/bin/linbpq/.
Corrija os caminhos do script de acordo com o seu local de instalação.

Para criar o script faça,

$ cd /usr/local/bin/linbpq
$ nano up-linbpq.sh

Copie e cole este script no seu editor de texto

#!/bin/bash
#
# see the original idea: https://packet-radio.net/update-linbpq-with-up2bpq/
# modify by Ricardo Oitavén @02/04/2020
#

linbpq_local_path="/usr/local/bin/linbpq"
versions="$linbpq_local_path/versions"
linbpq_remote_path="http://www.cantab.net/users/john.wiseman/Downloads/Beta"

cd $linbpq_local_path/

local=$(date -d "$( stat /usr/local/bin/linbpq/linbpq | awk '/Modify/{gsub( /^[^:]+: +/,"",$0); print}' )" "+%s")
remote=$(date -d "$( curl -sI http://www.cantab.net/users/john.wiseman/Downloads/Beta/pilinbpq | awk '/last-modified/{gsub( /^[^:]+: +/,"",$0); print}' )" "+%s")

# Compare the modified date`s and test if file exist on remote server
if [[ ($local -lt $remote) && (wget -S --spider $linbpq_remote_path/pilinbpq 2>&1 | grep 'HTTP/1.1 200 OK') ]];
then
   # test if $versions directory exist
   if [ ! -d "$versions" ]; then
      mkdir $versions
      chown pi-star. $versions
      chmod 755 $versions
   fi
   # remove previous versions of pilinbpq, if exist
   rm -f $linbpq_local_path/pilinbpq*
   # downloading new version
   wget -N $linbpq_remote_path/pilinbpq -P $linbpq_local_path
   # move and keep last version
   mv $linbpq_local_path/linbpq $versions/linbpq_$local
   chmod -R 700 $versions
   mv $linbpq_local_path/pilinbpq $linbpq_local_path/linbpq
   chown pi-star. $linbpq_local_path/linbpq
   chmod 755 $linbpq_local_path/linbpq
   # stop running linbpq and wait for it to close
   sudo pkill --signal 2 --exact linbpq
   sleep 10
   echo "linbpq has been updated! Wait for linbpq to restart…"
else
   echo "No updates available or possible to do!"
fi

A seguir dê-lhe permissões de execução

$ chmod 755 up-linbpq.sh

E, corra-o, por exemplo a partir do directório onde se encontra,

$ ./up-linbpq.sh

De modo a actualizar automaticamente, insira a seguinte linha no crontab, fazendo sudo nano /etc/crontab

# update linbpq daily
33 1    * * *   pi-star /usr/local/bin/linbpq/up-linbpq.sh

Praticamente todos os exemplos neste blog dizem respeito a projectos a correr sob pi-star. Altere o utilizador “pi-star” para “pi” se correr sob raspberry pi ou o seu utilizador de login!

Referências:
https://packet-radio.net/update-linbpq-with-up2bpq/

Notificação de novas mensagens na sua BBS

(versão beta)
Só recentemente e a meu pedido o John Wiseman, G8BPQ, introduziu a notificação de mensagens pessoais por APRS.

Com este artigo pretendo ir mais longe…
Quem tinha um TNC2 recorda-se com certeza que, quando recebia novas mensagens na pBBS, no painel frontal piscava um led amarelo, que se apagava quando estas eram lidas.
Essa funcionalidade, fácil de ser implementada num raspberry pi perdeu-se! Talvez por questões de compatibilidade com a versão do BPQ para Microsoft Windows já não é possível…

Se quem como eu substituiu o velhinho TNC2 por um computador ou Rpi sente a falta desta funcionalidade.
Este projecto pretende resolver esta questão e abrir a ideia a outras possíveis aplicações como as que recentemente criei,

  • envio de dados meteo por APRS a partir do projecto Open Weather
  • notificações em APRS de AOS de satélites de APRS/AX.25

Neste projecto, os scripts precisam de se ligar ao linbpq e verificar se existem novas mensagens para o seu indicativo, por telnet. Por isso é necessário instalar o software “expect” para linux. Faça,

sudo apt-get install expect

Depois na directoria onde está instalado o linbpq crie o seguinte ficheiro,

$ cd /usr/local/bin/linbpq
$ nano lmBBS.sh
(copie e cole as ligas a seguir)

#!/usr/bin/expect -f

spawn telnet [YOUR NODE ADDRESS] 8010
expect "callsign:"
send "[CALLSIGN]\r";
expect "password:"
send "[PASSWORD]\r";

# Wait for a prompt. Adjust as needed to match the expected prompt.
expect "Press ? For list of commands\r"
send "BBS\r";
sleep .1;
send "LM\r";
sleep 1;
send "B\r";

interact

Substitua o [CALLSIGN], [PASSWORD] e [YOUR NODE ADDRESS] pela sua conta de login no linbpq, sem os parêntesis rectos “[ ]”.

Dê permissões de execução ao script,

$ chmod 755 lmBBS.sh

Se tudo funcionar como planeei execute o script fazendo ./lmBBS.sh e observe a ser feita automaticamente a ligação ao seu node por telnet, a entrada na BBS, a leitura de novas mensagens e, a seguir o fecho da ligação.

Agora vamos criar o script que irá receber e tratar os dados provenientes desta interação com o BPQ.
Para a notificação por e-mail vai ter de instalar e configurar o exim4.

Crie um novo script, supondo que se encontra na directoria de instalação do linbpq e corrija os caminhos e variáveis de acordo com a sua instalação.

Ligue-se à sua BBS pelo seu browser favorito. No menu da consola web, clique em “WebMail” e em seguida “Mine”. Retire do endereço URL a variável key. Copie e cole no código abaixo este valor.

http://node.oitaven.pt:9123/WebMail/WMMine?WB09K2721
$ nano bbsnewmsg.sh
(copie e cole as ligas a seguir)

#!/bin/bash

# set variables
nl='
'
# GPIO pin
pin=17
# validation key
key="WB09K2721"
# new messages read command
lmBBS="/usr/local/bin/linbpq/lmBBS.sh"

# filter to identify new unread messages
IFS=$'\n'
var=($($lmBBS | grep " PN " | awk '{ print $0 }'))
#echo "${var}"
msg="${#var[@]}"
echo "Tem $msg mensagens por ler..."

function join { local IFS=$'\n'; shift; echo "$*"; }
body=$(join , ${var[@]})
echo "$nl$body"

unset IFS

# if new messages, send e-mail alert - optional
if [ $msg -gt 0 ]; then
   # on pi-star certain directories are created on virtual disks, for example /var/log, so it is necessary to manually create the exim4 log file
   if ! [[ -f "/var/log/exim4/mainlog" ]]
   then
      sudo mkdir /var/log/exim4/
      sudo touch /var/log/exim4/mainlog
      sudo chown -R Debian-exim. /var/log/exim4/ 
   fi
   echo "Read your messages at http://node.oitaven.pt:9123/WebMail/WMMine?$key$nl$nl$body" | mail -s "You have $msg new messages in packet mailbox" callsign@domain.com
fi
# end e-mail alert

# led turn on in case of have mensages
if [ $msg -ne 0 ]; then
   # turn led on with Rpi GPIO
   #gpio -g mode $pin out
   #gpio -g write $pin 1

   # if blink is running don't call it again
   process=$(pgrep blink.sh)
   if ! [ "${#process}" -gt 0 ] ; then
      /linbpq/blink.sh &
   fi
else
   sudo pkill --signal 1 --exact blink.sh
   # reset $pin and put it in read mode
   gpio -g write $pin 0
   gpio -g mode $pin in
fi
# end led alert

Substitua o seu endereço de e-mail e o seu endereço URL do linbpq onde acede por webmail.

Ligue o Led ao GPIO, em série com uma resistência de valor entre 100 ohm e 330 ohm, ao raspberry pi, entre um dos pinos GND e o GP17,

Crie o script que irá piscar o led, fazendo,

$ nano blink.sh
#!/bin/bash

pin=17
gpio -g mode $pin out

while :
do
   gpio -g write $pin 1
   sleep 1
   gpio -g write $pin 0
   sleep 1
done

Dê permissões de execução a ambos os scripts,

$ chmod 755 bbsnewmsg.sh
$ chmod 755 blink.sh

E, a partir de agora é este o ficheiro que passa a chamar para verificar se tem novas mensagens ./bbsnewmsg.sh

Ao correr o script, este faz a chamada ao script de ligação por telnet e leitura da lista de novas mensagens, se as houver, envia um e-mail de notificação e acende um led ligado à porta 17 do GPIO.

Para correr o script automaticamente de 6 em 6 horas, adicione uma linha no seu crontab em /etc/crontab

2 */6 * * * pi-star /usr/local/bin/linbpq/bbsnewmsg.sh

Este foi um exemplo de como se podem integrar outros programas com o BPQ de modo simples e não intrusivo.
Este último script tem algumas falhas, por exemplo sempre que é chamado notifica todas as mensagens por ler… A ideia era ser chamado a cada 5 minutos, mas então não deveria enviar múltiplos e-mails de notificação de mensagens anteriores… Fica para próximas versões!

Logo que possível farei actualizações nestes scripts. Teste e crie os seus script com esta ideia. Sinta-se livre de copiar e distribui-los… agradeço menção a CT1EBQ.

Passos para adicionar CT1EBQ à sua lista de Nodes/BBS

Modo expert

Adicione esta linha em "BROADCAST NODES" no seu config - MAP CT1EBQ-8 node.oitaven.pt UDP 10093 B

BBS para transferência de mensagens de packet - EBQBBS ou CT1EBQ-5

node/BBS HA (route path) - CT1EBQ.CTLX.PRT.EU

…e, não esqueça – envie-me um e-mail com as suas configurações!

Passo a passo…

As primeiras configurações devem ser feitas no ficheiro bpq32.cfg
Edite este ficheiro, em linux por exemplo, fazendo,

$ nano bpq32.cfg

…e acrescente as seguintes linhas, nas secções enunciadas,

Configuração do Node

Adicionar no port de AX25, na secção “BROADCAST NODES” uma entrada tal como,

MAP CT1EBQ-8 node.oitaven.pt UDP 10093 B

onde,

MAP - representa a instrução para iniciar o mapeamento do node
CT1EBQ-8 - o indicativo e SSID do node
node.oitaven.pt - endereço ou DDNS (DNS dinâmico)
UDP 10093 B - protocolo e port utilizado na ligação (não esquecer de criar uma regra no seu firewall/router para o endereço IP do BPQ/linbpq com port 10093 em UDP)

Como alternativa pode ser adicionado cada node também na secção “ROUTES:” se se pretende definir o factor qualidade, como,

CT1EBQ-8,193,1

onde,

CT1EBQ-8 - o indicativo e SSID do node
193 - factor de qualidade estabelecido como óptimo  na maioria dos casos
1 - port (é possível definir rotas com diferentes factores de qualidade para cada port)

Estas configurações só são aplicadas quando reiniciar o BPQ!

Configuração da BBS

Supondo que já tem a sua BBS configurada, para partilhar e entregar correio noutras BBS através dos nodes… abra seu o browser preferido, e a partir da página de gestão do sistema, no menu “Mail Mgmt”, faça o seguinte:

1. configure um novo utilizador (estação de packet ou BBS) em, “Users”.
Escreva o indicativo CT1EBQ na caixa “Add” e prima este botão.

2. em seguida edite CT1EBQ na lista à sua esquerda nesta mesma página.
Preencha as check box: BBS, Expert e, Allow Sending Bulls.

no menu “Forwarding” seleccione CT1EBQ na lista à esquerda e preencha os campos de acordo com,

TO: CT1EBQ
AT: AMSAT; ARL; ARRL; WW; EU; PRT (1 por linha, sem ";")
Connect Script: C 1 EBQBBS (ou, CT1EBQ para entregar pelo port de AX.25, se for o seu caso, o port 1. Adicione regras de acordo com as instruções do BPQ)
BBS HA: CT1EBQ.CTLX.PRT.EU
Enable Forwarding: (check)
Interval: 3600 (Secs)
Request Reverse: (check)
Interval: 3600 (Secs)
Send new messages without waiting for poll timer: (check)
FBB Blocked: (check)
Max Block: 10000
Allow Binary: (check)
Use B1 Protocol: (check)
…e, não se esqueça de fazer "Update"

White Lists

As white lists servem para propagar novos indicativos pelas BBS. Deste modo, e se a informação BBS HA estiver completa em cada utilizador é possível partilhar endereços de hierarquia para que as BBS saibam o caminho e onde cada mensagem deve ser entregue a novos utilizadores.

Configure “WP Params” na página “Configurations”

Send WPUpdates: (check)
Reject WP Bulls: (check)
Type P: (check)
e, em "WP Destinations" adicione uma linha com,
WP@CT1EBQ.CTLX.PRT.EU

A seguir envie-me um e-mail com as suas configurações:

MAP [o seu callsign]-[SSID do node] [o seu endereço] UDP 10093 B (ex. MAP CT1EBQ-8 node.oitaven.pt UDP 10093 B)

BBS callsign: [o seu callsign]-[SSID do node] (ex. CT1EBQ-5, ou alias EBQBBS)

node/BBS HA (route path) ex. CT1EBQ.CTLX.PRT.EU

Referências
1) factor de qualidade
http://ohiopacket.org/index.php/Calculating_Net/Rom_route_quality
2) configuração do node
http://www.cantab.net/users/john.wiseman/Documents/BPQCFGFile.html
3) configuração da BBS
http://www.cantab.net/users/john.wiseman/Documents/BPQ%20Mail%20and%20Chat%20Server%20Mail%20Forwarding.htm

pi-star +GUI, packet e aplicações desktop

Há uns meses atrás comecei este projecto. Sempre fui adepto de “all in one”, nas impressoras, nos rádios, nos gadgets, até nos canivetes suíços! Compreendo quem prefira um rádio para HF, outro para VHF e UHF, mas eu gosto deles com tudo!
Este projecto é para os que gostam de “tudo na mesma caixa”!

Há uns meses, nem sabia o que era um Raspberry Pi até que me rendi… comprei um zero com wireless, experimentei o 3B + e depois comprei um 4. Foi com o mesmo entusiasmo com que recebi o meu ZX81 ou o Spectrum em 1982, mas com tecnologia mais recente e capaz de um projecto deste tipo!
– Era o computador que faltava na minha estação de rádio! Sem ventoinhas, logo sem barulho, a 5V ou facilmente alimentado a partir de 12V e, o Raspberry 4 com uma capacidade de processamento suficiente para correr um sem número de aplicações em simultâneo! Estas características maravilharam-me…

Tudo começou quando adquiri o meu rádio D-Star, instalei num Pi zero W o software pi-star, num computador antigo a correr linux, apenas linha de comandos, o linbpq para packet e APRS e depois precisava de outro brincar com modos digitais…
Eram muitos computadores, todos ligados, a consumir energia 24 horas por dia! Não, tinha de haver outra solução.
A solução passava por um computador, todos os sistemas e software a correr ali…
Pretendia ainda uma solução alimentada a 12V, de modo a poder alimenta-lo a baterias e criar sistemas de alimentação redundante.

A solução era mesmo um Raspberry Pi!

Fiz teste num 3B + de um amigo. Percebi que tinha de instalar primeiro o pi-star, a última versão “buster” do debian, disponível para download no site deste excelente projeto.
O pi-star tem uma excelente característica, depois do arranque o sistema entra em modo read-only, e apesar de o podermos pôr em read-write, tudo está feito para que volte a read-only no instante seguinte! Era um quebra cabeças e o primeiro problema a resolver! Todos os posts anteriores foram o caminho a percorrer para chegar até aqui e resumem a minha experiência em Pi.

Se quiser ter os modos digitais, o propósito de ter instalado o core do pi-star, terá de adquirir uma pequena placa de RF, chamada MMDVM hotspot. Encontra-se facilmente no eBay e a minha custou cerca de 15€ mais despesas de envio.

As instruções seguintes mostra como o fazer.

No final deste projecto, com algumas horas e muita paciência, fica com um Raspberry Pi (recomendo o 4, com 2 ou mais Gb de RAM) com,

pi-star, para modos digitais (D-Star, DMR, YSF...)
packet e APRS no linbpq + (Hamlib, Direwolf, Xastir, Linpac)
recepção de WSPR com uma simples RTL-SDR v3
FLRig e FLDigi
WSJT-X
JTDX
GridTracker (Display connections on a map)
JS8CALL
CQRLOG + TQSL (Advanced Ham Radio Logbook)
GPredict (Sat-Tracking)
QSSTV (Slow Scan Televison)
GQRX (SDR)
FreeDV (Digital Voice)
VOACAP (Propagation Prediction)
Chirp (Programming transceivers)
Qtel (Echolink Client)
WSPR with RTL-SDR v3
VNC server para acesso externo (tablet, telefone ou computador)

Que tal? 🙂

Instruções

Não há fórmulas mágicas, os bons projecto levam tempo!
Precisa tempo e paciência, sobre tudo se não tem muita experiência com sistemas operativos linux em linha de comandos. No entanto tentei tanto neste como nos posts anteriores criar instruções para que fosse apenas copiar e colar…
Neste projecto, e porque não sou o autor de tudo, deixo links para outros sites, para os siga e instale tudo pela ordem que sugiro.

Comecemos por instalar o pi-star

Faça o download e siga as instruções para o seu sistema operativo.
A instalação do pi-star não é opcional já que este projecto se baseia nele, que inclui o último sistema operativo “buster” à data em que escrevo este artigo.

Depois vamos instalar o interface gráfico GUI. Sim, vai ter uma consola gráfica, mas toda a instalação corre praticamente em linha de comandos.

Depois de instalado o pi-star, identifique a sua versão. Terá de habilitar o SSH, configurar o acesso à network ou, ligar um monitor, teclado e rato. Abra uma janela terminal, ou aceda por SSH e faça,

$ uname -a

…dá-lhe algumas informações sobre a versão, processador e hardware
Para conhecer qual o sistema operativo, pelo nome que conhecemos digite,

$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

ou, digite o comando “lsb_release -a”.
Actualize agora o seu sistema já instalado,

$ sudo pistar-update
$ sudo pistar-upgrade
$ sudo reboot

O pi-star, foi desenhado com propósito único, e será necessário instalar diversos componentes: software, plugins de terceiros e livrarias de código; de modo a dotá-lo de todo o software para o nosso projecto.

Instale a componente de configuração do Raspberry Pi, que facilitará muito qualquer configuração de rede, hardware, serviços, etc…

$ rpi-rw
$ sudo apt-get install raspi-config

Ambiente gráfico de janelas

Agora vamos instalar o X ou interface gráfico GUI. Passo simples. Depois já terá acesso ao sistema pelo interface gráfico de janelas que lhe será mais familiar…

$ rpi-rw
$ sudo apt-get install -y raspberrypi-ui-mods rpi-chromium-mods
$ sudo reboot

A partir deste momento, pode aceder já por teclado e rato, ligando um monitor à porta HDMI do Pi.
Habilite o VNC, para lhe permitir aceder remotamente, se não pretender como eu, ligar o monitor. Na linha de comandos ainda, faça,

$ rpi-rw
$ sudo raspi-config
7 Advanced Options
A5 Resolution
…seleccione o modo à sua escolha, no meu caso escolhi uma das configurações 16:9
Faça "Ok", "Ok" de novo, "Finish", "Yes" vamos fazer um reboot…

Agora já se pode ligar por VNC.
Antes de fazer reboot, pode também habilitar o “auto-login” no sistema de janelas. Volte ao “raspi-config” e siga os menus “Boot option”->”Desktop / CLI”->”Desktop autologin”.
Algumas instruções que li sugeriram também instalar o xinit. Considere-o para já como opção,

$ rpi-rw
$ sudo apt-get install --no-install-recommends xinit

Para conhecer o endereço IP do seu Pi, faça

$ ifconfig

Identifique a sua ligação de rede, instale o VNC Desktop no seu computador e já pode aceder confortavelmente ao seu Pi, pelo sistema gráfico de janelas.
Note que, a partir do momento que tem acesso ao interface gráfico pode abrir ali uma janela terminal e executar todos os comandos que se seguem…
Eu continuo ligado por SSH.

Porque o pi-star é muito robusto, quase à prova de desligar a alimentação quando e sempre que quiser sem qualquer cuidado em particular, tem também um firewall onde é preciso permitir o acesso externo. Nada complicado. Crie o ficheiro ipv4.fw que será lido pelo sistema e adicione estas regras ao iptables, firewall linux,

$ rpi-rw
$ sudo nano /root/ipv4.fw
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -m tcp -p tcp --dport 5900:5901 -j ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -m tcp -p tcp --dport 8010 -j ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -m tcp -p tcp --dport 8081 -j ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -m tcp -p tcp --dport 8772 -j ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -m tcp -p tcp --dport 9123 -j ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -m udp -p udp --dport 10093 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -m udp -p udp --dport 10093 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -m udp -p udp --dport 81 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -m tcp -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -m udp -p udp --dport 64738 -j ACCEPT
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -m tcp -p tcp --dport 64738 -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -m tcp -p tcp --sport 1024:65535 -j ACCEPT

Grave, CTRL + x, “yes” e volte à linha de comandos.

Nota: esta lista de regras tem sido actualizada ao longo do projecto embora nem sempre seja referido nos diversos posts. Sempre que uma aplicação ou serviço necessita de comunicar para fora, ou receber dados, temos de abrir a porta respectiva!

Configurei já as portas 5900 e 5901 para acesso por VNC, a 8010 para acesso por telnet ao linbpq, a 9123 o acesso web à consola do linbpq e a 10093 para transferência de mensagens entre nodes, também para o linbpq.
Para aplicar estas regras,

$ sudo pistar-firewall

Configurar o pi-star em mode read-write permanente

Descobrir onde o pi-star re-escrevia as instruções de read-write para read-only deu algum trabalho, muitos ficheiros abertos e re-escritos, novas instalações, pesquisas na web, frustração e umas boas horas. Vamos começar.

Temos de substituir todas as instruções que montam o sistema como leitura apenas, para leitura e escrita, isto é de “ro /” por “rw /”.
Comecemos pelas regras na montagem das partições,

$ rpi-rw
$ sudo nano /etc/fstab

Igualmente importante, edite o ficheiro /etc/rc.local e comente com “#” a última linha onde aparece a expressão,

mount -o remount,ro /

ou melhor, não a comente e altere-a para,

mount -o remount,rw /

na directoria /var/www, fazemos o login como root,

$ cd /var/www
$ sudo -s

Verificamos quantas entradas existem,

# find ./ -type f -print0 | xargs -0 grep "ro \/"

Trocamos todos os “ro /” por “rw /”. Para evitar erros copie a seguinte expressão,

# rpi-rw
# find ./ -iregex ".*.php?$" | xargs perl -pi -e 's/ro \//rw \//'

E, verificamos que já não existe nenhum “ro /” por substituir. O output deve ser vazio!

# find ./ -type f -print0 | xargs -0 grep "ro \/"
# exit
$

“exit” sai do user root.
Em cada actualização do pi-star bem sucedida devemos correr estes 3 últimos comandos “find…”! É natural que, durante o update surjam mensagens como: “os seguintes ficheiros foram modificados…” Ignore e, volte a fazer os procedimentos descritos anteriormente.

Vamos editar ainda os seguintes ficheiros e substituir todas as entradas de “ro /” por “rw /”

$ rpi-rw

/etc/bash.bashrc ; não é necessário
/etc/bash.bash_logout
/etc/apt/apt.conf.d/100update
/etc/systemd/system/apt-daily.service
/etc/systemd/system/apt-daily-upgrade.service

Renomear os seguintes ficheiros, por exemplo para _[ficheiro]

$ rpi-rw
$ sudo mv /etc/init.d/umountroot /etc/init.d/_umountroot
$ sudo mv /etc/init.d/checkroot.sh /etc/init.d/_checkroot.sh
$ sudo reboot

Existem mais alguns ficheiros encontrados em /usr/local/sbin, /usr/sbin e /usr/bin mas não detectei nada que provocasse o sistema a voltar a read-only.

Notas:
1. Ao tentar actualizar agora o pi-star deve aparecer-lhe uma mensagem com esta,

Starting Services…
Done
Updates complete, sleeping for a few seconds before making the disk Read-Only
mount: /: mount point is busy.
Finished

O que é normal visto que o sistema é read-write. Não há problema.

2. Recentemente dei que o meu raspberry entrava em modo “halt” todas as noites à hora que executava o cron.daily
O problema manifestava-se quando corria no script “powersave” a instrução “tvservice -o” que desliga o port HDMI. Desabilite esta linha, editando o ficheiro /etc/cron.daily/powersave e comentando a instrução com “#”,
#/opt/vc/bin/tvservice -o

Instalação de modos digitais em ambiente gráfico

Quer ter uma estação de rádio digital completa no seu raspberry pi?
Prossiga agora para o artigo – https://dl1gkk.com/setup-raspberry-pi-for-ham-radio/

Instalou tudo? Fantástico!

Instalação de Packet AX.25 e APRS com linbpq

Siga os meus posts anteriores, instale e configure de acordo com as suas preferências, o seu indicativo, o QRA locator, etc…

packet/APRS iGate, BBS, node e DX cluster com Raspberry Pi (parte 1)
packet/APRS iGate, BBS, node e DX cluster com Raspberry Pi (parte 2)
packet/APRS iGate, BBS, node e DX cluster com Raspberry Pi (parte 3)
packet/APRS iGate, BBS, node e DX cluster com Raspberry Pi (parte 4)
packet/APRS iGate, BBS, node e DX cluster com Raspberry Pi (parte 5)
Mapas de APRS em BPQ32

Opcional

Acesso linux a partir do linbpq
Direwolf AX.25 + FEC = FX.25 (para quem pretende explorar o HF)
Monitor de WSPR com raspberry pi + dongle RTL-SDR

Veja também

Solução de problemas com a placa de som CM108
Como criar Menus no Gnome para o raspberry pi

…aspecto final


Referências:
https://gist.github.com/kmpm/8e535a12a45a32f6d36cf26c7c6cef51
https://forum.pistar.uk/viewtopic.php?t=1237&start=10
https://forum.pistar.uk/viewtopic.php?t=858

Referências avançadas:
https://hallard.me/raspberry-pi-read-only/
https://gist.github.com/paulfurley/8e2e2ead269d81d6c41604233a696acd
https://medium.com/@andreas.schallwig/how-to-make-your-raspberry-pi-file-system-read-only-raspbian-stretch-80c0f7be7353
https://github.com/km4ack/pi-build
https://forum.pistar.uk/viewtopic.php?f=3&t=2059&start=40

Acesso linux a partir do linbpq

Pode ser interessante ter acesso à linha de comandos linux da máquina onde está instalada a aplicação linbpq, no entanto é uma falha de segurança grave, nomeadamente se o acesso for feito por rádio frequência, onde comandos e senhas vão em texto simples e por isso são facilmente visíveis.

Exemplos de utilização da linha de comandos a partir do packet:

  • verificar recursos da máquina: mem; top; df; du…
  • alterar pequenas configurações
  • verificar ligações de rede: ping; whois; telnet; nmap…
  • estabelecer ligação a outros servidores ou à internet das coisas

Volto a referir que é uma falha grave, não só o acesso por TCP/IP mas mais ainda por RF!

Configurações

Nas configurações do linbpq, em bpq32.cfg, na porta de telnet deve incluir o comando

CMDPORT=nnn 23

“nnn” representa o número da porta que já possa existir e está configurada para outras aplicações, por exemplo o DX Cluster. Se não existir acrescente apenas CMDPORT=23.
O acesso às diversas portas faz-se pela variável HOST descrita a seguir. Por exemplo, neste caso, HOST 1, representa a porta “nnn”, HOST 2, a nossa porta 23.

no meu caso,

PORT
   PORTNUM=2 ; Optional but sets port number if stated
   ID=telnet server
   DRIVER=Telnet
   CONFIG
   CMS=1
   CMSCALL=CT1EBQ
   CMSPASS=USVAWV
   LOGGING=1
   DisconnectOnClose=1
   TCPPORT=8010
   FBBPORT=8011 6300
   HTTPPORT=9123
   CMDPORT=7300 23
   LOGINPROMPT=callsign: 
   PASSWORDPROMPT=password: 
   MAXSESSIONS=100
   CTEXT=Welcome to CT1EBQ's telnet server.\nPress ? For list of commands\n
   USER=ct1ebq,[password],CT1EBQ,,SYSOP
   USER=ANON,pass
ENDPORT

Depois devemos adicionar uma linha às aplicações,

APPLICATION 1,LINUX,C 2 HOST 1 S

Onde,
1 – pode ser um número sequencial e representa o id da aplicação
LINUX – o comando a ser chamado
C 2 – o “PORTNUM=2” de telnet, conforme o exemplo acima
HOST 1 – a porta 23, sendo o HOST 0, a porta 7300 neste exemplo
S – para que a aplicação regresse ao “node” ao invés de fechar a ligação telnet do packet

Para que tudo isto funcione deve instalar o servidor de telnet na mesma máquina onde corre o linbpq. No raspberry pi,

sudo apt-get install telnetd

e, criar o seu utilizador em linux e atribuir uma password

sudo useradd CT1EBQ
sudo passwd CT1EBQ

Para sair da linha de comandos linux faça “exit”.

Após me ligar por telnet ao linbpq,