quarta-feira, 16 de dezembro de 2015

OpenELEC/Kodi autoplay de vídeos e playlists

Com o OpenELEC obtém-se rapidamente um media center completamente funcional mas com alguns ajustes é possível transformá-lo num kiosk que apresenta automaticamente um conjunto de vídeos num loop infinito.

Isto permite que sempre que seja ligado, arranque e inicie a reprodução sem qualquer intervenção humana (não é necessário rato/teclado/comando).

Assim, um sistema com uma televissão e um raspberry pi fica completamente autónomo para reprodução de vídeos de demonstração, divulgação, etc.

Criar uma playlist

A maneira mais fácil consiste em reproduzir um vídeo e depois ir adicionando novos vídeos à playlist.
Quando se tiver a playlist concluída resta guardar com um nome sugestivo, por exemplo: videos_loop

Por defeito fica guardada em /storage/.kodi/userdata/playlists/video.

Reproduzir automaticamente e ficar em loop

Para iniciar a reprodução automática de vídeos/playlists, é possível criar um ficheiro autostart.sh em /storage/.config com:
(
sleep 20 ;
kodi-send --action="PlayerControl(RepeatAll)" ;
kodi-send --action="PlayMedia(\"/storage/.kodi/userdata/playlists/video/videos_loop.m3u\")" ;
)&


É fácil perceber que inicialmente se esperam 2 segundos, depois é enviado o comando para o kodi alterar a forma de reprodução para RepeatAll e de seguida é dada a ordem de reprodução da playlist guardada.

Existem inúmeros comandos disponíveis para o kodi [1], permitindo personalizar e automatizar diversas tarefas.

A partir daqui resta ligar o raspberry pi com o OpenELEC e depois de carregar o Kodi, a playlist é iniciada e fica em loop até ser desligado.


Referências

[1] - http://kodi.wiki/view/List_of_built-in_functions

segunda-feira, 14 de dezembro de 2015

Kodi e Plex Media Server

Uma Raspberry Pi permite tornar qualquer televisão num centro multimédia de excelência a um custo extremamente acessível. Já foi visto aqui há muito tempo os diferentes "sabores" para utilização do Raspberry Pi como media center e o "sabor" aconselhado continua a ser o OpenELEC.

De facto as versões atuais do OpenELEC já trazem o Kodi (após o rebranding feito ao XBMC), mas continuam a caber num simples cartão de 512MB!!

Apesar de ser possível aceder ao Plex Media Server por DLNA, existe uma forma muito mais apelativa e que permite criar um autêntico cliente Plex no Kodi.

A solução passa pela instalação da skin Amber e do Add On PleXBMC.

1 - Instalação do PleXBMC

A instalação do PleXBMC está bem descrita [1] na página do projeto e aqui ficam as dicas.

A forma mais fácil é obter o ficheiro a partir do site [2]:
wget https://github.com/hippojay/plugin.video.plexbmc/archive/v4.0.0beta4.zip -O PleXBMC_latest.zip

Depois é necessário copiá-lo para o OpenELEC:
scp PleXBMC_latest.zip root@openelec:~

Para fazer a instalação resta aceder ao Kodi, ir aos Add Ons e instalar a partir de zip, selecionando o ficheiro copiado anteriormente.

2 - Instalação da skin Amber

Não há muito a dizer para além das instruções oficiais [3], no Kodi para ativar esta skin é necessário aceder à condiguração da Aparência, onde será necessário obter mais e escolher a Amber para descarregar e instalar.

Após este processo é perguntado se é pretendido ativar e utilizar esta skin.

Ao utilizar esta skin, no menu Settings aparece uma opção Go Plex que deverá ser utilizada para entrar em modo Plex e assim visualizar todos os conteúdos multimédia disponibilizados pelo Plex Media Server de forma muito apelativa.

Para reverter para o modo Kodi existe a opção Go Kodi.

3 - Configuração do PleXBMC para acesso ao servidor Plex

Com uma atualização do Plex Media Server deixou de ser tão transparente a configuração do cliente para quem não tenha ou não queira ter conta no plex.tv.
Assim, na configuração do servidor é necessário:
1 » definir o servidor primário com o IP do Plex Media Server;
2 » aceder a Manage MyPlex e quando aparecer se pretende definir uma conta, deve cancelar-se o processo;
3 » aceder a Select Master Server... e deverá aparecer o nome do Plex Media Server, que deverá ser selecionado.

Após tudo isto é possível aceder à opção Go Plex e navegar pela galeria de media de forma muito apelativa.

4 - Kodi 14 e a skin Amber

A versão OpenElec 5.0.8 vem com o Kodi 14.2 e a skin Amber esconde diversas opções das configurações do Kodi. Contudo, é possível alterar um ficheiro [4] para ativar novamente as Configurações. Assim, resta aceder por SSH ao OpenELEC e substituir o ficheiro ~/.kodi/addons/skin.amber/1080i/Includes.xml:
ssh root@IP_do_OpenELEC
cd ~/.kodi/addons/skin.amber/1080i
mv Includes.xml Includes.xml.old
wget http://sprunge.us/JOCj -O Includes.xml

De seguida é possível fazer o Reload da skin no Kodi para que sejam carregadas as novas opções do menu.

[1] - http://kodi.wiki/view/Add-on:PleXBMC
[2] - https://github.com/hippojay/plugin.video.plexbmc/releases
[3] - http://kodi.wiki/view/Add-on:Amber
[4] - http://forum.kodi.tv/showthread.php?tid=187051

Plex Media Server - Instalação e utilização

A utilização de um servidor de streaming para uma rede interna é muito útil pois permite que a partir de um único local de armazenamento sejam disponibilizados conteúdos multimédia para os diversos equipamentos da rede: televisões, telemóveis, tablets, portáteis, pc, etc.

Um servidor de streaming já visto anteriormente é o miniDLNA que é muito versátil e permite rapidamente ter um serviço básico de DLNA numa rede.

Uma alternativa muito apelativa é o Plex Media Server [1], apesar de ser proprietária é gratuita e existe uma versão para ubuntu a partir do 10.04.

1 - Instalação

Utilizando uma máquina com ubuntu, pelo menos 10.04, é necessário descarregar o instalador [2], por exemplo, para a versão disponível neste momento será:
wget https://downloads.plex.tv/plex-media-server/0.9.12.19.1537-f38ac80/plexmediaserver_0.9.12.19.1537-f38ac80_amd64.deb

Depois é necessário instalar o pacote com:
sudo dpkg -i plexmediaserver_0.9.12.19.1537-f38ac80_amd64.deb

A partir daqui tudo deve ser instalado, caso surjam dependências que seja necessário instalar, é possível automatizar esse processo com:
sudo apt-get install -f

2 - Configuração e Utilização

A partir do momento que está a executar, o PMS (Plex Media Server) pode ser acedido por browser a partir de qualquer localização da rede:
http://IP_do_servidor:32400/web/index.html

Depois é possível acrescentar uma Biblioteca (Library), por exemplo, para Filmes e indicar o local onde estão os ficheiros a disponibilizar.

Caso se tratem de filmes existem alguns scripts automáticos que fazem a inventariação dos filmes com capas e ficha técnica da produção.




Depois resta utilizar um cliente compatível, por exemplo, grande parte das televisões LG com DLNA têm a aplicação Plex cliente instalada, que ao ser utilizada apresenta uma ótima interface para acesso aos ficheiros multimédia disponibilizados pelo Plex Media Server.



[1] - https://plex.tv/
[2] - https://plex.tv/downloads

terça-feira, 8 de dezembro de 2015

Servidor HTTPS gratuito e confiável - Let's Encrypt

O projeto Let's Enrypt [1] juntou grandes empresas da rede na criação de uma entidade de certificação gratuita, automática e aberta. Permitindo assim que todos os websites possam ter certificados válidos para encriptação do tráfego que geram.

Para perceber melhor o conceito, pode dizer-se que toda a navegação feita em endereços URL que utilizam apenas http:// é aberta e pode ser facilmente acedida por qualquer "pessoa" na rede.
Quando se utilizam endereços URL que começam por https:// significa que existe uma negociação automática entre o servidor e o nosso browser, que lhes permite comunicar de uma forma que toda a informação que passa na rede está encriptada e ao ser apanhada não é perceptível o que lá está.

Para que se possa confiar no servidor, há muitos anos criou-se um esquema de empresas de certificação que se responsabilizam pela validade da identidade do servidor e pela segurança e fiabilidade das chaves utilizadas. Este processo envolvia quase sempre o pagamento dos certificados.

Sempre foi possível a criação de certificados manuais, que cada administrador criava para os seus servidores, contudo como eram manuais e não havia nenhuma entidade externa a validá-los, quase todos os browsers exibem avisos que o site é potencialmente perigoso e afins. Tornando-se assim uma solução pouco aceitável para uma utilização generalizada pois, apesar de as comunicações serem muito mais seguras, os utilizadores eram alertados para os perigos de segurança do certificado não ser reconhecido...

Com o projeto Let's Encrypt, grandes empresas como a Mozilla, Cisco, Akamai, Facebook, entre muitas outras, decidiram tornar o processo de criação e atribuição de certificados para servidores muito mais rápido, fácil e económico, permitindo assim que a proteção de todas as comunicações feitas online esteja ao alcance de todos.

Instalação do cliente

Para obter e instalar o software cliente do Let's Encrypt, a forma mais rápida é através do git:
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

Para instalar:
./letsencrypt-auto

Na documentação do projeto há imensas referências que permitem cobrir grande parte das configurações básicas [2], designados de plugins e que estão muito bem documentados.

Criação de um certificado manual

No meu caso particular tenho o tráfego HTTP (porta 80) a ir para um servidor e o HTTPS (porta 443) a ir para outro servidor. Assim, não é possível utilizar os plugins disponibilizados pelo cliente, pois este pressupõe que ambos os serviços são assegurados pela mesma máquina.

Desta forma foi instalado o cliente Let's Encrypt no servidor para HTTPS e executado como root:
./letsencrypt-auto certonly --manual

De seguida é necessário indicar o domínio alvo do certificado, podendo ser incluídos diversos domínios separados por vírgulas ou espaço, por exemplo: dominio.my.to

Depois é indicado que o nosso IP público será registado e associado ao pedido de certificado.

E são depois apresentadas algumas informações que deverão ser seguidas:
Make sure your web server displays the following content at
http://dominio.my.to/.well-known/acme-challenge/coJuntoDeL3trasENumerosMUUIIIITOOOgrande before continuing:

coJuntoDeL3trasENumerosMUUIIIITOOOgrande-876kjjhasd982134

E fica à espera que seja feito o setup necessário, após o qual devemos dar enter.

Como se pode observar pelas indicações dadas, o serviço do Let's Encrypt vai tentar aceder a um ficheiro em HTTP no mesmo domínio, assim é necessário criar as pastas necessários no servidor HTTP e criar o ficheiro indicado com o conteúdo pretendido:
mkdir -p /var/www/html/.well-known/acme-challenge
printf "%s" coJuntoDeL3trasENumerosMUUIIIITOOOgrande-876kjjhasd982134 > /var/www/html/.well-known/acme-challenge/coJuntoDeL3trasENumerosMUUIIIITOOOgrande

Para testar deve abrir-se o browser o endereço http://dominio.my.to/.well-known/acme-challenge/coJuntoDeL3trasENumerosMUUIIIITOOOgrande e verificar se aparece o texto pretendido:
coJuntoDeL3trasENumerosMUUIIIITOOOgrande-876kjjhasd982134

Quando isto estiver pronto, resta voltar ao cliente do Let's Encrypt e finalizar com enter e, caso tudo corra bem, aparecerá a seguinte informação:
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/dominio.my.to/fullchain.pem. Your cert will
   expire on 2016-03-07. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.
 - If like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Configuração do apache para o certificado Let's Encrypt

Agora que existe um certificado válido, resta alterar a configuração do apache para que utilize este novo certificado.
Os certificados estão disponíveis em /etc/letsencrypt/live/dominio.my.to/ e explicados na documentação [3].

No ficheiro de configuração do HTTPS no apache, por exemplo, /etc/apache2/sites-available/default-ssl.conf, deverão ser refletidos os novos certificados:
####Configuration for SSL #####
SSLEngine on
# LET'S ENCRYPT
SSLCertificateFile /etc/letsencrypt/live/dominio.my.to/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/dominio.my.to/privkey.pem
#### End of SSL Configuration ####

De seguida resta reiniciar o apache e começar a utilizar o novo certificado válido
service apache2 restart

Ao aceder ao serviço HTTPS no browser já será apresentado como seguro sem as mensagens normais que o certificado não é válido.



[1] - https://letsencrypt.org/
[2] - https://letsencrypt.readthedocs.org/en/latest/using.html#installation
[3] - https://letsencrypt.readthedocs.org/en/latest/using.html#where-are-my-certificates

domingo, 8 de novembro de 2015

RF24 - Utilizar o nRF24L01+ para comunicações com Raspberry Pi e Arduino

O chip nRF24L01+ permite a comunicação sem fios na faixa dos 2.4GHz de forma económica [1] (menos de 1 euro, é questão de se procurar nos diversos sites).

Com dois desses chips é possível efetuar comunicações entre dois dispositivos eletrónicos, neste caso um Raspberry Pi 2 B e um arduino uno.

A primeira questão são so drivers necessários para ambas as plataformas. Existem diversas implementações, aqui será utilizada a RF24, fornecida por TMRh20 [2].

Ligações

nRF24L01+ possui oito pinos mas apenas se utilizam os primeiros 7.

pinnRF24L01+arduino
UNO
RPi
pin
RPi
GPIO
1GNDGND25GND
2VCC3.3V173v3
3CED715GPIO22
4CSND824GPIO8
5SCKLD1323SCKL
6MOSID1119MOSI
7MISOD1221MISO

É necessário efetuar as ligações de um nRF24L01+ ao arduino UNO e de outro nRF24L01+ ao Raspberry Pi.

Instalação do Software

arduino
Abrir o arduino IDE e ativar a biblioteca RF24 (testado em 1.6.5):
Sketch > Include Library > Manage Libraries...
Pesquisar por RF24 e clicar em Install

Obter o exemplo [3] fazer o upload para o arduino e abrir a consola CTRL+SHIFT+M, introduzir T para começar a enviar pings.

Raspberry Pi
No Raspbian garantir que o sistema está atualizado:
sudo apt-get update
sudo apt-get upgrade

Ativar o SPI
sudo raspi-config
Advanced > enable the SPI kernel module

Instalar as bibliotecas RF24 do TMRH20 [4]:
wget http://tmrh20.github.io/RF24Installer/RPi/install.sh
chmod +x install.sh
./install.sh

Depois resta entrar no diretório de exemplos para o RPi e experimentar:
cd rf24libs/RF24/examples_RPi
make
sudo ./gettingstarted

Depois é necessário pressionr 0 (zero) para receber os pings do arduino.

Referências

[1] - http://www.aliexpress.com/w/wholesale-nrf24l01.html
[2] - http://tmrh20.github.io/RF24/index.html
[3] - http://tmrh20.github.io/RF24/GettingStarted_8ino-example.html
[4] - http://tmrh20.github.io/RF24/RPi.html
[5] - Projeto com comunicação entre o Raspberry Pi e o arduino (em inglês): https://www.coconauts.net/blog/2014/09/03/send-readings-from-arduino-to-raspberry-via-radio/
[6] - Referências para o arduino e o nRF24L01+ (em inglês): http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01
[7] - Projeto mais antigo para comunicação entre o Raspberry Pi e o arduino (em inglês): http://blog.the-jedi.co.uk/2013/10/07/nrf24l01-and-raspberry-pi/

terça-feira, 27 de outubro de 2015

Proxmox/OpenVZ contentor sem permissões de escrita em /dev/null

Algumas VPS OpenVZ ao reiniciarem ficavam com permissões erradas (rw- --- ---, ou seja, 600) em alguns devices:
/dev/null
/dev/full
/dev/zero
/dev/random
/dev/urandom

A partir daqui [1] foi possível obter uma regra para o udev aplicar sobre estes devices e permitir que a cada arranque as permissões sejam as corretas.

Como neste caso o ficheiro não existe é necessário criá-lo e adicionar o conteúdo abaixo.
# nano /etc/udev/rules.d/50-fix-permission.rules
SUBSYSTEM=="mem", KERNEL=="null|zero|full|random|urandom", MODE="0666"

Guardar com CTRL + X e Y

[1] - https://bbs.archlinux.org/viewtopic.php?pid=1123209#p1123209

sábado, 11 de julho de 2015

VPN: Criar chave para cliente android e configuração

0. Introdução

As vantagens na utilização de um servidor VPN têm duas vertentes essenciais:
  • Aumentar a segurança na utilização de redes inseguras (redes wireless avulsas ou sem encriptação)
  • Ligar a uma rede local remota
O primeiro aspeto é essencial nos dias que correm pois grande parte dos equipamentos de lazer (centros comerciais, cafés, restaurantes, parques, etc) possuem redes sem fios gratuitas e/ou de fácil ligação e com muitos utilizadores em simultâneo.
A utilização de uma ligação VPN nestes cenários aumenta muito o nível de segurança da nossa navegação.

O segundo aspeto permite que o nosso dispositivo esteja "fisicamente" ligado à rede remota. Muito útil no caso de aplicações de ISP que apenas funcionam dentro da rede local de cada cliente (por exemplo, aplicações para visualização da emissão de TV e afins).
Desta forma, com acesso à Internet e ativando a ligação VPN é possível navegar a partir de qualquer lugar como se estivéssemos na rede local do servidor VPN e, assim, utilizar as referidas aplicações como se estivéssemos fisicamente na rede local.

1. Requisitos

1. Acesso a um servidor VPN.
2. Instalação da aplicação OpenVPN Connect no dispositivo cliente, designado de tabuleta

O teste foi feito com um sistema Android 4.x, mas existem diversas instruções para outros dispositivos ([1] ver Step 5 - Installing the Client Profile).
Para equipamentos Android de versões 2.x é necessário acesso root ao equipamento [2].

2. Criação de Certificados, Chaves e afins

Para cada dispositivo cliente é necessário criar um conjunto de ficheiros que permitem encriptar a ligação de forma muito segura.

Assim, acedendo ao servidor VPN, basta utilizar:
cd /etc/openvpn/easy-rsa/
./build-key tabuleta

Serão perguntadas diversas questões que para utilização normal podem ser confirmadas todas com ENTER e no final com dois 'y' para confirmação.

Este processo cria vários ficheiros na pasta /etc/openvpn/easy-rsa/keys, nomeadamente: tabuleta.crt e tabuleta.key.

3. Criação de um Perfil para o OpenVPN Connect

A criação de um perfil permite combinar num único ficheiro todos elementos necessários para a configuração de um cliente VPN.

1. Copiar o exemplo base de perfil:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/tabuleta.ovpn

2. Editar o perfil tablet.ovpn:
nano /etc/openvpn/easy-rsa/keys/tabuleta.ovpn

3. Alterar a linha remote my-server-1 1194 para ter o domínio do servidor, por exemplo qualquercoisa.no-ip.org:
remote qualquercoisa.no-ip.org 1194

4. Se o cliente não é Windows, devem descomentar-se as linhas:
user nobody
group nogroup

5. Deve comentar-se depois as linhas que fazem referência aos certificados e chaves:
#ca ca.crt
#cert client.crt
#key client.key

6. De seguida é possível acrescentar e copiar/colar de forma a que o ficheiro tabuleta.ovpn fique:
(conteúdo existente)
<ca>
(colar conteúdo do ca.crt)
</ca>
<cert>
(colar conteúdo do tabuleta.crt)
</cert>
<key>
(colar conteúdo do tabuleta.key)
</key>

Para auxiliar a este processo criei um bash script que está disponível aqui [3].

7. Copiar o perfil tabuleta.ovpn de forma segura para o cliente.

4. Configuração do OpenVPN Connect no cliente

Para que um dispositivo se possa ligar ao servidor VPN necessita ter um cliente instalado e configurado. Neste caso o dispositivo tabuleta é um equipamento Android 4.x.

1. Instalar a aplicação OpenPVN Connect [4]

2. Abrir o OpenVPN Connect e importar o perfil copiado anteriormente com a opção:
Import > Import Profile from SD card

3. Selecionar o ficheiro tabuleta.ovpn e posteriormente deverá aparecer o perfil na aplicação

4. Quando estiver com acesso à Internet é possível fazer Connect e todo o tráfego passará pelo servidor VPN.

Este processo está muito bem explicado com diversas capturas de exemplos aqui [1Step 5 - Installing the Client Profile.

Referências

[1] - Página com muita informação sobre criação e configuração do servidor e dos clientes
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-14-04

[2] - Instruções para instalação no GingerBread 2.3
https://my.hostvpn.com/knowledgebase/15/OpenVPN-for-Android-rooted-Gingerbread-23x.html

[3] - Script para criação de um perfil para OpenVPN
http://librehacks.blogspot.pt/2015/07/vpn-script-para-criacao-de-perfis.html

[4] - Aplicação OpenVPN Connect
https://play.google.com/store/apps/details?id=net.openvpn.openvpn

VPN: Script para a criação de perfis OpenVPN

O script seguinte permite criar um perfil para um cliente OpenVPN após serem criados os seus certificados e chaves (./build-key tabuleta).

Deve ser guardado em /etc/openvpn/easy-rsa/keys/mergeKeys.sh

E deve ser invocado a partir dessa localização com o argumento do nome do cliente. Por exemplo:
./mergeKeys.sh tabuleta

Para criar tabuleta.ovpn, a partir de ca.crt, tabuleta.crt e tabuleta.key.

Deve copiar-se o perfil de exemplo OVPN para template.ovpn e configurá-lo de acordo com o servidor.


mergeKeys.sh

#!/bin/bash
# Check for client name
echo -e "Checking for client name... "
if [ $# -eq 0 ]; then
    echo -e "ERROR: No client name provided.\nAborting."
    echo -e "\nYou have to supply the client name for the certificate. eg:\n$0 client1\n"
    exit 1
else
    echo -e "Using $1 to find certificates..."
fi

# Check for client.ovpn
if [ -f "$1.ovpn" ]; then
  echo -e "WARNING: $1.ovpn already exist."
  echo -e "\nAborting."
  exit 1
fi

FILE=template.ovpn
echo -e "Checking for template profile $FILE... "
if [ ! -f $FILE ]; then
  echo -e "ERROR: $FILE not found."
  echo -e "\nAborting."
  exit 1
fi

FILE=ca.crt
echo -e "Checking for $FILE... "
if [ ! -f $FILE ]; then
  echo -e "ERROR: $FILE not found."
  echo -e "\nAborting."
  exit 1
fi

FILE="$1.crt"
echo -e "Checking for $FILE... "
if [ ! -f $FILE ]; then
  echo -e "ERROR: $FILE not found."
  echo -e "\nAborting."
  exit 1
fi

FILE="$1.key"
echo -e "Checking for $FILE... "
if [ ! -f $FILE ]; then
  echo -e "ERROR: $FILE not found."
  echo -e "\nAborting."
  exit 1
fi

# All files exist
echo -e "All files exist.\n"

FILE=client.ovpn
echo "Creating $1.ovpn base file with $FILE..."
cp "$FILE" "$1.ovpn"
if [ ! -f "$1.ovpn" ]; then
  echo -e "ERROR: $1.ovpn couldn't be created. Check permissions."
  echo -e "\nAborting."
  exit 1
fi

FILE=ca.crt
echo "Append $FILE to $1.ovpn..."
echo "<ca>" >> "$1.ovpn"
cat "$FILE" >> "$1.ovpn"
echo "</ca>" >> "$1.ovpn"

FILE="$1.crt"
echo "Append $FILE to $1.ovpn..."
echo "<cert>" >> "$1.ovpn"
cat "$FILE" >> "$1.ovpn"
echo "</cert>" >> "$1.ovpn"

FILE="$1.key"
echo "Append $FILE to $1.ovpn..."
echo "<key>" >> "$1.ovpn"
cat "$FILE" >> "$1.ovpn"
echo "</key>" >> "$1.ovpn"

echo -e "Done.\n"

quinta-feira, 26 de março de 2015

Debian GNU/Linux: Instalação de pacotes de versões diferentes

Introdução

O objetivo consiste em ter um debian jessie e utilizar a versão 2.5* do avidemux, que já só está disponível nos repositórios wheezy.

Versões

Debian GNU/Linux utiliza um sistema de versões muito versátil existindo basicamente três tipos de repositórios: stable (atualmente wheezy), testing (jessie) e unstable (sid).

O que os diferencia são as atualizações de pacotes que podem sofrer.

Um sistema que utilize a base stable normalmente possui apenas atualizações de segurança ou de bugs, não são implementadas novas versões que tragam novas funcionalidades.

Já o unstable tem entrada e saída de pacotes de acordo com as necessidades de ter as versões mais recentes de diversos softwares e bibliotecas. Resta acrescentar que esta facilidade na atualização de programas/bibliotecas pode fazer que com um simples upgrade um determinado programa deixe de funcionar com as novas versões de bibliotecas... No entanto, existe sempre muita documentação sobre as atualizações e convém estar atento [1].

O testing junta o melhor dos dois, pois permite ter versões relativamente recentes dos principais programas e bibliotecas e mantém um ritmo salutar de novas versões que, por regra, não trazem incompatibilidades com o software existente.

Se a escolha da versão certa a seguir (stable, testing ou unstable) traz dúvidas, há ainda a considerar a opção de poder utilizar pacotes com versões diferentes das que estão no repositório principal.
Isto é, utilizar uma base stable e instalar um software cuja versão existe apenas a partir do testing. Neste caso é pretendido exatamente o oposto disto.

APT Pinning

Consiste na indicação da prioridade a dar a cada repositório, mas pode ser definida por pacote.
No caso em questão, as versões recentes do avidemux trouxeram algumas novidades que impediam, por exemplo, a visualização lado a lado do input e output do vídeo com os efeitos.

Assim, neste caso é uma base testing (jessie) que terá instalado o avidemux a partir da base stable (wheezy). Como este programa não faz parte dos repositórios debian oficiais, normalmente é instalado a partir dos repositórios deb-multimedia.org.

Assim, é necessário adicionar ambos os repositórios em /etc/apt/sources.list.d/multimedia.list:
deb http://www.deb-multimedia.org wheezy main non-free
deb http://www.deb-multimedia.org jessie main non-free

Como os pacotes no jessie são mais recentes que os do wheezy, tudo o que seja atualizações e instalações seram feitas smepre a partir do jessie.

Assim, para forçar uma determinada versão que possui as funcionalidades pretendidas, é necessário especificar as seguintes preferências em /etc/apt/preferences:
Package: avidemux
Pin: version 1:2.5*
Pin-Priority: 1001

Package: avidemux-common
Pin: version 1:2.5*
Pin-Priority: 1001

Package: avidemux-plugins
Pin: version 1:2.5*
Pin-Priority: 1001

Isto faz com que estes três pacotes (avidemux, avidemux-common e avidemux-plugins) fiquem na versão 1:2.5*, que existe nos repositórios wheezy, e não sejam atualizados para as versões que estão disponíveis no jessie.

A partir daqui basta atualizar com apt-get update
Depois qualquer apt-get install ou apt-get upgrade ou mesmo apt-get dist-upgrade irá seguir as preferências em relação aos pacotes definidos.

Referências

[1] - https://wiki.debian.org/DebianUnstable#Where_can_I_get_help_with_Sid.3F
[2] - https://wiki.debian.org/AptPreferences

segunda-feira, 16 de março de 2015

Android: Alterar ficheiros e pastas em /system

Após muita pesquisa aqui ficam algumas dicas para, de uma forma simples e sem instalar muitas aplicações, ter acesso ao sistema de ficheiros /system do Android que normalmente está acessível apenas em modo de leitura.

Hardware/Software utilizado

Xiaomi Redmi 2
Android 4.4.4 KTU84P
MIUI 5.2.6 Beta
Terminal Emulator for Android by Jack Palevich [3]

Instruções

1. Através da aplicação Security do Android é possível aceder às Permissions e aí ao Root access, sendo necessário ativar o Terminal Emulator para que tenha acesso root.

2. Abrir o Terminal Emulator e na consola deve aperecer algo terminado com $, para ativar o modo de root, basta executar su e deve aparecer o símbolo # na linha de comando.

3.1. Verificar as partições montadas:
mount

3.2. Verificar as características da partição /system
mount | grep /system

Normalmente aparece algo do género:
/dev/block/bootdevice/by-name/system /system ext4 ro,seclabel,relatime,discard,data=ordered 0 0

4. Remontar a partição /system como rw
mount -o rw,remount /system

5.  COM O DEVIDO CUIDADO é possível alterar a informação existente.

 ATENÇÃO 
 Pode estar a alterar informação
 que torne o dispositivo inoperável! 
 Proceda com cuidado. 


6. Para voltar a ter a partição apenas como leitura é possível reiniciar o dispositivo ou então com o comando:
mount -o ro,remount /system

Outros Cenários

Caso estes procedimentos funcionem com outros dispositivos e/ou versões do Android, pode adicionar essa informação nos comentários.

Referências

[1] - http://www.pocketmagic.net/write-on-the-android-read-only-file-system/ - Comandos para remontar partições no Android
[2] - http://forum.xda-developers.com/showthread.php?t=921928 - Copiar ficheiros para /system
[3] - https://play.google.com/store/apps/details?id=jackpal.androidterm - Terminal Emulator for Android