nginx com serviço rtmp

Brevemente um post sobre este processo
tps://johnathan.org/rtmp-nginx-apt/
instalado na pasta /tmp

Pretendia criar uma forma de redireccionar o streaming para vários serviços, como youtube e twitch, uma das maneiras é fazer uso da aplicação Nginx e adicionar o serviço RTMP, muito usado para streamimng.
O problema é que aplicação Nginx não inclui o serviço RTMP e não é possível adicionar como módulo externo, a solução passa por re-compilar Nginx com adição do módulo. A re-compilação, por si, nem é muito complexa, existem tutoriais, o mais complexo é ter já instalado com o próprio pacote de Ubuntu, para além de a versão actual de Nginx ser divergente com a de Ubuntu, os locais de instalação também divergem. assim tive que re-compilar o pacote Nginx do Ubuntu.

Apesar de estar a usar Armbian, a base é Ubuntu e o próprio sistema inclui as flags necessário para compilar. Atenção que Armbian não usa sudo, existem acções que requerem poderes de root.

Antes de iniciar o trabalho de recompilação, é importante actualizar o sistema.

apt-get update
apt-get upgrade

Agora é preciso criar a “cama” para re-compilar o pacote, criar a pasta para receber o código ao descarrega-lo e aplicações necessárias para compilar.

mkdir /tmp/src
cd /tmp/src
apt-get build-dep nginx
apt-get source nginx

Exemplo do conteúdo da pasta /tmp/src.

drwxr-xr-x 10 root root    300 Jan  2 18:24 nginx-1.10.3
-rw-r--r--  1 root root 649900 Jul 13 18:08 nginx_1.10.3-0ubuntu0.16.04.2.debian.tar.xz
-rw-r--r--  1 root root   3158 Jul 13 18:08 nginx_1.10.3-0ubuntu0.16.04.2.dsc
-rw-r--r--  1 root root 911509 Feb 11  2017 nginx_1.10.3.orig.tar.gz

Será necessário ir à pasta modules e descarregar o módulo adicionar.

cd nginx-1.10.3/debian/modules
git clone https://github.com/arut/nginx-rtmp-module

Os próximos passos são a preparação para o processo mais doloroso de todo.
A seguir é preciso alguma cautela, vai ser necessário editar um ficheiro, construção errada e pode representar perda de tempo.
Realizar backup é sempre a melhor recomendação, apesar de não mexer em nada crítico do sistema, nada melhor que aproveitar o momento para ter um ponto de restauro actualizado.
Abrir o ficheiro /tmp/src/nginx-1.10.3/debian/rules, procurar pela linha que contenha common_configure_flags, se usarem o nano carregar em ctrl+w para fazer a pesquisa, ctrl+o para gravar e ctrl+x para sair. Adicionar –add-module=$(MODULESDIR)/nginx-rtmp-module à flag.

nano /tmp/src/nginx-1.10.3/debian/rules
common_configure_flags := \
                        --with-cc-opt="$(debian_cflags)" \
(...)
                        --with-http_auth_request_module \
                        --add-module=$(MODULESDIR)/nginx-rtmp-module

Na edição do texto é preciso ter atenção que no final de cada linha existe a barra \, EXCEPTO a última, o que essa barra faz é “dizer” que a linha ainda não acabou e continua na próxima linha. Se a intenção é terminar o comando na última linha, não pode conter a barra, caso contrário irá gerar erro na compilação.
Se tudo estiver como esperado, está tudo pronto para criar o novo pacote com o processo de compilação, este será o tal processo mais doloroso que tinha falado anteriormente, vários MINUTOS de espera, os minutos dependem da performance da máquina, CPU e capacidade de ler e escrever dados, durante o processo de compilar estive a ver o uso de CPU, com o htop, pareceu-me que o CPU tinha pouca intensidade de trabalho [teste do youtube], estando mais dependente da leitura e escrita do dispositivo.

cd /tmp/src/nginx-1.10.3
dpkg-buildpackage -uc -b

Exemplo dos ficheiro obtidos.

drwxr-xr-x 10 root root    4096 Jan  2 18:24 nginx-1.10.3
-rw-r--r--  1 root root   26042 Jan  2 20:12 nginx_1.10.3-0ubuntu0.16.04.2_all.deb
-rw-r--r--  1 root root    5026 Jan  2 20:13 nginx_1.10.3-0ubuntu0.16.04.2_armhf.changes
-rw-r--r--  1 root root  649900 Jul 13 18:08 nginx_1.10.3-0ubuntu0.16.04.2.debian.tar.xz
-rw-r--r--  1 root root    3158 Jul 13 18:08 nginx_1.10.3-0ubuntu0.16.04.2.dsc
-rw-r--r--  1 root root  911509 Feb 11  2017 nginx_1.10.3.orig.tar.gz
-rw-r--r--  1 root root   47360 Jan  2 20:12 nginx-common_1.10.3-0ubuntu0.16.04.2_all.deb
-rw-r--r--  1 root root  495184 Jan  2 20:12 nginx-core_1.10.3-0ubuntu0.16.04.2_armhf.deb
-rw-r--r--  1 root root 4046964 Jan  2 20:12 nginx-core-dbg_1.10.3-0ubuntu0.16.04.2_armhf.deb
-rw-r--r--  1 root root   37562 Jan  2 20:12 nginx-doc_1.10.3-0ubuntu0.16.04.2_all.deb
-rw-r--r--  1 root root  676372 Jan  2 20:13 nginx-extras_1.10.3-0ubuntu0.16.04.2_armhf.deb
-rw-r--r--  1 root root 6537274 Jan  2 20:13 nginx-extras-dbg_1.10.3-0ubuntu0.16.04.2_armhf.deb
-rw-r--r--  1 root root  516808 Jan  2 20:12 nginx-full_1.10.3-0ubuntu0.16.04.2_armhf.deb
-rw-r--r--  1 root root 4485050 Jan  2 20:12 nginx-full-dbg_1.10.3-0ubuntu0.16.04.2_armhf.deb
-rw-r--r--  1 root root  394328 Jan  2 20:12 nginx-light_1.10.3-0ubuntu0.16.04.2_armhf.deb
-rw-r--r--  1 root root 3106048 Jan  2 20:12 nginx-light-dbg_1.10.3-0ubuntu0.16.04.2_armhf.deb

O pacote está pronto a ser instalado, mas antes de iniciar o processo de instalação, é preciso remover o que já existe no sistema.

apt-get remove nginx [nginx-core]

O passo mais esperado, a instalação.

dpkg --install /usr/src/nginx-common_1.10.3-0ubuntu0.16.04.2_all.deb

Ou outro pacote, como nginx-full_1.10.3-0ubuntu0.16.04.2_armhf.deb. Verificar se o módulo está funcional.

nginx -V

Deve existir no meio do texto com –add-module=/usr/src/nginx-1.10.1/debian/modules/nginx-rtmp-module.
Para que os updates do sistema não passe por cima da alteração.

apt-mark hold nginx-full

Com este trabalho todo, se tudo estiver como esperado, o Nginx contem o módulo para o serviço RTMP.
Mais tarde, caso seja necessário reverter e permitir o update alterar, basta usar o comando.

apt-mark unhold

Assim termino o meu tutorial de como compilar e instalar Nginx com o serviço RTMP integrado.

scanner HP em linux

Aqui deixo os passos que usei para que seja possível usar o scanner em linux.
Para instalar em ARMbian

apt install hplip
apt install sane-utils
apt install netpbm

Para instalar em Ubuntu

sudo apt-get install hplip
sudo apt-get install sane-utils
sudo apt-get install netpbm

Ambas as distribuições são baseadas em debian, sendo possível comutar os comandos tanto em ARMbian como em Ubuntu até mesmo distro base Debian, no entanto debian tem realeases mais lentas podendo instalar versões mais antigas. Como ubuntu não fornece no terminal acesso directo a privilégios de root, requer o uso de sudo.
Aproveito para deixar uma breve explicação do que cada aplicação faz ou a sua razão de sr necessário instalar.

  • hplip – base para multifunções da HP
  • sane-utils – para obter a imagem do scanner em pbm
  • netpbm – converter pbm em jpg, png, etc
  • libjpeg-progs – obter dados do ficheiro jpg

A aplicação libjpeg-progs tinha como objectivo obter os meta-dados do ficheiro em jpg para depois poder manipular, mas por enquanto o projecto foi abandonado.

Escrita no disco

Para obter a quantidade de dados a serem escrito e lidos do disco e saber que processos o fazem.

iotop

Permite fazer uso de opções:

iotop -o

Obtem-se a lista dos processos que estão actualmente a escrever ou ler do disco, escondendo os restantes.

iotop -a

Vai contando a quantidade de dados que o processo cria.

iotop -d 3.1

A actualização dos dados é feito de x em x segundos em vez do habitual a cada segundo. Neste caso a cada 3.1 segundos.

Como é óbvio dá para misturar as opções. Na minha opinião, fazer uso das três opções ao mesmo tempo é bastante interessante, principalmente aumentar o intervalo de tempo para sistema com baixa performance, como a orange pi zero, para evitar um uso mais exaustivo da aplicação e usar -o para se obter um ecrã mais limpo, evitando aparecer processos que não estão a realizar qualquer operação de leitura ou escrita.

Teste de stress ao sistema

Hoje andei a testar a Orange Pi Zero ao nível de stress do sistema.
Uma das aplicações que usei para testar foi stress, na qual permite testar várias áreas da máquina.

Para instalar em sistema debian e variantes basta executar o comando:

# apt-get install stress

Deixo aqui alguns comandos interessantes:

stress --cpu 8 --timeout 20

O comando anterior cria [–cpu 8] 8 threads (execuções em paralelo) com calculos da raiz quadrada, [–timeout 20] durante 20 segundos.

stress --io 8 --timeout 20

O comando anterior cria [–io 8] 8 threads com sincronização forçando a criação de IO (In Out) ou entrada e saída de pedidos.

stress --vm 8 --timeout 20

O comando anterior cria [–vm 8] 8 threads com pedidos de malloc e free, ou seja, pedidos de alocação e libertação de espaço de memória.

stress --hdd 8 --timeout 20

O comando anterior cria [–hdd 8] 8 threads com pedidos de escrita e apagar no disco.

Claro que dá para fazer pedidos de tudo a molho como :

stress --cpu 8 --io 8 --vm 8 --hdd 8 --timeout 20

Não esperem obter dados de benchmark com esta aplicação, a única coisa que faz é colocar o PC sob stress. É sempre possível usar outras aplicação para monitorizar o estado do sistema.

Linux output para ficheiro e terminal

Quando se pretende que o output (resultado) de um comando apareça no terminal e ao mesmo tempo ser gravado para um ficheiro, basta fazer:

<comando> | tee <ficheiro>

Um exemplo de comando:

echo "olá mundo" | tee ficheiro_teste

Linux mostrar partições

Para conseguir ver as partições de um dispositivo de armazenamento:

# parted /<drive> 'print'

<drive> é o dispositivo de armazenamento como por exemplo /dev/sda.
# executar como root

SD tamanho errado

Um dos problemas quando se recria uma imagem de dados para um cartão SD, cria uma partição do tamanho da imagem, criando um problema de desaproveitamento de espaço. A solução passa por redimensionar a partição para ocupar totalmente o espaço disponível do cartão.

Infelizmente não consegui realizar o processo usando resize2fs, no final a partição mantinha o mesmo tamanho, tive que fazer uso do ambiente gráfico do gparted para realizar o processo, que à partida, seria simples.

No final consegui aproveitar o espaço todo do cartão e colocar na orange PI zero.

linux hdd/ssd/usb benchmark

Pode-se considerar um benchmark, já que nos permite obter a performance básica de leitura e escrita.

No terminal do linux basta executar os comando.

Para testar a leitura (como #root):

hdparm -t /<device>

<device> consiste no caminho para o dispositivo como por exemplo /dev/sda1

Para testar a escrita na drive:

time sh -c "dd if=/dev/zero of=ddfile bs=8k count=250000 && sync"; rm ddfile

Antes de executar o comando anterior, é preciso navegar até à pasta onde vai ser criado o ficheiro ddfile

Bitcoin Core Daemon

bitcoin

Como usar o bitcoin core daemon (bitcoin core sem ambiente gráfico ou usa-lo no terminal).

Iniciar com o comando:

bitcoind -daemon

Após executar o comando, é normal não obter algum feedback ou retorno. No entanto é possível obter informação usando o comando bitcoin-cli.

Para parar:

bitcoin-cli stop

Obter informação do estado actual da cadeia de blocos (blocks chain):

bitcoin-cli getblockchaininfo

Informação dos nós de ligação:

bitcoin-cli  getnetworkinfo

Informação sobre a carteira:

bitcoin-cli getwalletinfo