sexta-feira, 11 de janeiro de 2013

XBMC no Raspberry Pi

Uma utilização possível para o Raspberry Pi é como Media Center de uma qualquer televisão.

Para este efeito existem várias alternativas: http://wiki.xbmc.org/index.php?title=Raspberry_Pi

  • Raspbian + XBMC - permite ter um ambiente gráfico LXDE para tarefas genéricas, podendo depois carregar o XBMC. Contudo, este fica bastante lento e tem vários problemas com os conteúdos via DLNA.
  • OpenELEC - sistema media center muito rápido, mas que tem alguns problemas com os Add-ons de vídeo.
  • Raspbmc - sistema muito rápido e que teve o melhor suporte para reprodução de conteúdos.

Raspbmc - Rpi

Raspbmc implementa o XBMC  numa distribuição Linux baseada em Debian e criada especificamente para o Raspberry Pi.
No site alguns utilizadores indicam que é muito mais rápida que o OpenELEC que testei anteriormente.

Outra funcionalidade que salta à vista é o suporte para GPIO.

1. Instalação do Raspbmc

O processo de instalação tem duas fases, sendo a primeira feita numa máquina com leitor de cartões e a segunda no próprio Raspberry Pi.

Fase 1:

wget http://svn.stmlabs.com/svn/raspbmc/testing/installers/python/install.py

Introduzir o SD card e executar
sudo python install.py

Este processo descarrega 15MB da internet e formata o SD card convenientemente.

No final deve desmontar-se o SD card

Fase 2:
Introduzir o SD card no Rpi e ligar.
Após o arranque, é necessário iniciar o processo de instalação, muito simples, que descarrega à vez todos os componentes para o sistema: root, kernel, kernel modules, xbmc, etc...

Após isto tudo não reconheceu o teclado sem fios...

2. Resolução de Problemas

2.1. Problemas com a deteção do teclado

Como não se pode utilizar o sistema, é necessário aceder por SSH ao mesmo:
ssh pi@192.168.2.220
(A password por defeito é raspberry)

É possível depois carregar manualmente o módulo e ficar com o teclado funcional:
modprobe hid-logitech-dj

Mas a solução definitiva do Jan Karger proposta aqui, apesar de ter funcionado com o raspbian, continuava sem funcionar.
Após algumas pesquisas outra solução consiste em reiniciar (por SSH, sudo reboot) algumas vezes até o teclado ser detetado.

E após reiniciar duas vezes ficou sempre operacional... Explicação?...

3. Utilização

Com os problemas do teclado resolvidos não houve qualquer problema em aceder e reproduzir grande parte dos conteúdos do servidor DLNA.

Contrariamente ao que aconteceu com o OpenELEC, os Add-Ons para vídeo, nomeadamente do Youtube, Vimeo e NBA funcionam em pleno.

quarta-feira, 9 de janeiro de 2013

OpenELEC - Rpi

OpenELEC (Open Embedded Linux Entertainment Center) é uma distribuição Linux independente orientada especificamente para a criação de um media center baseado no XBMC e nas suas inúmeras funcionalidades.
Possui instalações para diferentes plataformas, incluindo o Raspberry Pi.

Instalar o OpenELEC

1. Descarregar daqui a imagem para Raspberry Pi.

2. Extrair os ficheiros
tar xvf OpenELEC-RPi.arm-devel-20121124031454-r12577.tar.bz2

3. Inserir o SD Card e verificar qual a sua designação (normalmente /dev/sdb)
ls /dev/sd*

4. Executar o instalador como root:
cd OpenELEC-RPi.arm-devel-20121124031454-r12577/
sudo ./create_sdcard /dev/sdb

5. Esperar, ejetar com segurança o SD card e experimentar.

Utilização do OpenELEC

Da curta utilização deu para perceber que o sistema dica extremamente rápido e responsivo.
Não houve qualquer problema em aceder e reproduzir grande parte dos conteúdos do servidor DLNA.

Contudo os Add-Ons para vídeo, nomeadamente do Youtube, Vimeo e NBA estavam broken e não era possível instalá-los... 

Alternativas? Raspbmc...

sábado, 22 de dezembro de 2012

Servidor PXE

A utilização de um servidor PXE numa rede permitirá que os clientes da rede possam arrancar através da rede. Isto permitirá por exemplo:

  • fazer instalações por rede;
  • utilizar o Clonezilla Live para fazer o upload/download de imagens de discos;
  • executar ferramentas de teste: memtest;
  • executar LiveCD por rede;
  • etc...

0. Resumo

  • Servidor com ubuntu server 12.04 LTS
  • Instalação do serviço TFTP
  • Configuração do serviço DHCP para suporte ao arranque por PXE

1. Instalação

O serviço TFTP pode ser instalado a partir de vários pacotes, contudo o que melhor suporte dá ao pxelinux é o tftpd-hpa [www].
sudo aptitude install tftpd-hpa
O ficheiro de configuração por defeito pode ser editado para confirmar os diretórios a utilizar pelo servidor TFTP:
sudo nano /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

Neste caso o diretório será: /tftpboot

1. Instalação

Como o serviço vai necessitar de vários ficheiros, será criada a seguinte estrutura de ficheiros e diretórios para melhor os organizar:
/tftpboot/
|-- pxelinux.0

|-- pxelinux.cfg/
    |-- default
    |-- local.cfg

    |-- menu.conf
    |-- splash.png

    |-- vesamenu.c32

|-- install/
    |-- install.cfg

    |-- ubuntu_12.04/
        |-- amd64

        |-- i386/ 

|-- live/
    |-- live.cfg
    |-- core/

|-- utils

    |-- utils.cfg

    |-- memtest/
    |-- clonezilla/

        |-- amd64

        |-- i486 


Os ficheiros .cfg serão criados de forma a permitir ter as opções de arranque necessárias.
Cada diretório está destinado a um tipo de utilização que pode conter diversos sistemas. Em cada sistema poderá existir depois uma separação por arquitetura (i386, amd64, etc).

É necessário obter então os ficheiros necessários ao arranque por PXE:
wget http://archive.ubuntu.com/ubuntu/dists/precise/main/installer-i386/current/images/netboot/netboot.tar.gz

tar -zxvf netboot.tar.gz

sudo mv ubuntu-installer/i386/pxelinux.0 /tftpboot
sudo mv ubuntu-installer/i386/boot-screens/syslinux.cfg /tftpboot/pxelinux.cfg/default
sudo mv ubuntu-installer/i386/boot-screens/* /tftpboot/pxelinux.cfg/
rm -r ubuntu-installer/i386/boot-screens

rm -r ubuntu-installer/i386/pxelinux.cfg

sudo mv ubuntu-installer/i386 /tftpboot/install/ubuntu_12.04/

A partir daqui toda a configuração será feita nos ficheiros existentes em /tftpboot/pxelinux.cfg/:
sudo nano pxelinux.cfg/default
include pxelinux.cfg/menu.cfg
default pxelinux.cfg/vesamenu.c32
prompt 0
timeout 0





2. Configurar servidor DHCP

É necessário adicionar:
allow booting;
allow bootp;

next-server 192.168.2.101;
filename "pxelinux.0";


3. Personalização

3.1 INCLUDE
Permite incluir o conteúdo de outro ficheiro de configuração no local em que é invocado.

3.2 LABEL
String que descreve o kernel e as opções, tem que ser único depois de convertido para um nome de ficheiro DOS (8 caracteres mais extensão).
Pode ser seguida de diversos comandos.

KERNEL - indica o ficheiro que vai arrancar.
Em alternativa pode ser utilizado:
LINUX image - para arrancar uma imagem de kernel linux
BOOT image - para arrancar um bootstrap (.bs ou .bin)
FDIMAGE image - para arrancar uma floppy disk image (.img)
CONFIG file - para reiniciar o bootloader com um ficheiro de configuração diferente.

APPEND - permite adicionar opções ao comando do kernel.

INITRD initrd_file - permite definir um initrd ou vários, separados por vírgulas.

LOCALBOOT 0 - permite arrancar o disco local.


3.3 DEFAULT
Indica o comando por defeito introduzido no boot:.

3.4 Módulos para User Interface
Podem ser selecionados diferentes modos de interface: menu.c32 ou vesamenu.c32)

PROMPT flag - caso a flag seja 1, mostra sempre o prompt de boot:; caso a flag seja 0, apenas mostra o prompt de boot: se for pressionada a tecla Shift ou Alt.

NOESCAPE flag - caso a flag seja 1, ignora as teclas para mostrar ao prompt de boot; caso a flag seja 0 e esteja definido PROMPT 0, será arrancado boot definido por default.

NOCOMPLETE flag - caso a flag seja 1, a tecla 'tab' não mostra as labels definidas no prompt de boot:.

ALLOWOPTIONS flag - por defeito a flag é 1, e permite carregar as opções definidas no APPEND; caso a flag seja 0 o utilizador não poderá especificar qualquer opção.

TIMEOUT timeout - Indica quanto tempo pausa no prompt de boot, a unidade é 1/10 segundos. O timeout é cancelado quando se pressiona qualquer tecla. Por defeito é 0 o que indica que não tem qualquer timeout.

SAY mensagem - apresenta a mensagem no ecrã.

DISPLAY filename - Apresenta o ficheiro indicado no arranque antes do prompt de boot:.
F1 filename
F2 filename
...etc...
F9 filename
F10 filename
F11 filename
F12 filename

A imagem splash.png tem que ter a resolução 640x480 e o modo de cor indexado com 256 cores.

quarta-feira, 19 de dezembro de 2012

Raspbian - Rpi

Raspbian é um sistema operativo baseado na versão wheezy do Debian GNU/Linux e especialmente adaptado ao Raspberry Pi.

1. Instalação

1.1. Obter a imagem do Raspbian

É possível obter a imagem a partir do site do Raspberry: http://www.raspberrypi.org/downloads

1.2. Gravar a imagem Raspbian num cartão SD

Neste caso foi utilizado um cartão SDHC Samsung 8GB Categoria 6.
O processo de gravação da imagem é relativamente rápido, menos de 5 minutos.
dd bs=4M if=2012-12-16-wheezy-raspbian.img of=/dev/sdb

Tue Dec 18 16:22:03 WET 2012
462+1 records in 462+1 records out 1939865600 bytes (1.9 GB) copied, 286.539 s, 6.8 MB/s
Tue Dec 18 16:26:49 WET 2012

2. Utilização

Depois de introduzir o SD no Raspberry Pi basta arrancar o mesmo e realizar os passos de configuração inicial que permitirão definir as opções mais comuns, incluindo o arranque automático do ambiente gráfico.

2.1. Autenticação

Os dados de acesso por defeito são:
utilizador: pi
palavra-passe: raspberry

3. Resolução de Problemas

3.1. Problemas com a deteção do teclado

Apesar da na instalação o teclado Logitech K400 ter sido detetado corretamente, nos arranques normais nem sempre era detetado (75% das vezes).

A resolução do problema passa por desligar/ligar o recetor USB do Rpi.

Para uma solução permanente sem esta necessidade, basta seguir os passos do Jan Karger aqui.

Editar o ficheiro /etc/rc.local
sudo nano /etc/rc.local

E acrescentar a seguinte linha antes do exit 0
sleep 5
rmmod hid-logitch-dj
modprobe hid-logitech-dj

3.2. Problemas com o layout do teclado

Apesar de corretamente definido no sistema, no ambiente gráfico LXDE o layout não era reconhecido.
A solução passa por editar o ficheiro /etc/xdg/lxsession/LXDE/autosatart e no final acrescentar a linha:
setxkbmap -layout "pt"

sexta-feira, 14 de dezembro de 2012

Configurações pxelinux

Comandos Principais


INCLUDE

Permite incluir o conteúdo de outro ficheiro de configuração no local em que é invocado.

LABEL

String que descreve o kernel e as opções, tem que ser único depois de convertido para um nome de ficheiro DOS (8 caracteres mais extensão).
Pode ser seguida de diversos comandos.
Para não conter nenhum valor colocar o símbolo '-' (LABEL - ).

KERNEL

Define o ficheiro que vai arrancar.
Em alternativa podem ser utilizadas outras designações para situações específicas:
LINUX image - para arrancar uma imagem de kernel linux
BOOT image - para arrancar um bootstrap (.bs ou .bin)
FDIMAGE image - para arrancar uma floppy disk image (.img)
CONFIG file - para reiniciar o bootloader com um ficheiro de configuração diferente.

APPEND

Permite adicionar opções ao comando do kernel.

INITRD initrd_file

Permite definir um initrd ou vários, separados por vírgulas.

LOCALBOOT 0

Permite arrancar o disco local.

Módulos para User Interface

Podem ser selecionados diferentes modos de interface: menu.c32 ou vesamenu.c32.

PROMPT flag - caso a flag seja 1, mostra sempre o prompt de boot:; caso a flag seja 0, apenas mostra o prompt de boot: se for pressionada a tecla Shift ou Alt.

NOESCAPE flag - caso a flag seja 1, ignora as teclas para mostrar ao prompt de boot; caso a flag seja 0 e esteja definido PROMPT 0, será arrancado boot definido por default.

NOCOMPLETE flag - caso a flag seja 1, a tecla 'tab' não mostra as labels definidas no prompt de boot:.

ALLOWOPTIONS flag - por defeito a flag é 1, e permite carregar as opções definidas no APPEND; caso a flag seja 0 o utilizador não poderá especificar qualquer opção.

TIMEOUT timeout - Indica quanto tempo pausa no prompt de boot, a unidade é 1/10 segundos. O timeout é cancelado quando se pressiona qualquer tecla. Por defeito é 0 o que indica que não tem qualquer timeout.

ONTIMEOUT tagname - Ao atingir o timeout arranca a tagname indicada.

SAY message - apresenta a mensagem no ecrã.

DISPLAY filename - Apresenta o ficheiro indicado no arranque antes do prompt de boot:.
É possível indicar os ficheiros associados a cada uma das teclas de função: F1 a F10 da seguinte forma:
F1 filename
F2 filename
...etc...
F9 filename
F10 filename
F11 filename
F12 filename

Menus

MENU TITLE title

Permite especificar o título de um menu, no topo deste e ao centro

MENU BEGIN [tagname] | MENU END

Permite criar um menu, opcionalmente com uma designação definida em tagname. O conteúdo do menu estará entre as linhas MENU BEGIN e MENU END.

MENU LABEL label

Apenas válido após um comando LABEL anterior. Permite alterar o texto apresentado para um entrada do menu e definir a tecla de atalho através do símbolo ^.
Ao contrário das LABEL normais, estas não precisam de ser únicas.

MENU SEPARATOR

Insere uma linha em branco.

MENU INDENT count

Permite colocar count espaços antes.

MENU DISABLE

Define a entrada como não selecionável. Útil para criar secções.

MENU DEFAULT

Define a entrada como a selecionada por defeito.

TEXT HELP | ENDTEXT

Permite colocar várias linhas de texto de ajuda entre a linha que contém TEXT HELP e a que contém ENDTEXT

MENU EXIT [tagname]

Permite sair do menu para o menu anterior ou para o menu com o nome definido em tagname.

MENU GOTO tagname

Permite ir para o menu com o nome definido em tagname.

MENU BACKGROUND background

Define a imagem de fundo.

MENU COLOR element ansi foreground background shadow

Permite especificar as cores a utilizar por cada um dos elementos:
  • element
screen Rest of the screen
border Border area
title Title bar
unsel Unselected menu item
hotkey Unselected hotkey
sel Selection bar
hotsel Selected hotkey
disabled Disabled menu item
scrollbar Scroll bar
tabmsg Press [Tab] message
cmdmark Command line marker
cmdline Command line
pwdborder Password box border
pwdheader Password box header
pwdentry Password box contents
timeout_msg Timeout message
timeout Timeout counter
help Help text
msgXX  Message (F-key) file attribute XX
  • ansi - é uma sequência de valores separadas por ponto-e-vírgula (;):
0 reset all attributes to their defaults
1 set bold
4 set underscore (simulated with color on a color display)
5 set blink
7 set reverse video
22 set normal intensity
24 underline off
25 blink off
27 reverse video off
30 set black foreground
31 set red foreground
32 set green foreground
33 set brown foreground
34 set blue foreground
35 set magenta foreground
36 set cyan foreground
37 set white foreground
38 set underscore on, set default foreground color
39 set underscore off, set default foreground color
40 set black background
41 set red background
42 set green background
43 set brown background
44 set blue background
45 set magenta background
46 set cyan background
47 set white background
49 set default background color

  • background e foreground são valores na forma #AARRGGBB - AA alpha, RR red, GG green e BB blue.
    Onde #00000000 é totalmente transparente e #ffffffff é branco opaco.
  • shadow - permite controlar a sombra com: "none" (sem sombra); "std"|"standard" (foreground mais elevado); "all" (tanto foreground como background estão elevados); "rev"|"reverse" (background mais elevado).
Se qualquer das opções for "*" ou omitida (no final da linha), o seu valor não será alterado.

MENU MSGCOLOR fg_filter bg_filter shadow - permite especificar o mesmo estilo a todas as caixas de mensagem de ajuda.

Posicionamento

Os valores por defeito são os indicados abaixo, que podem ser alterados.
O ecrã tem 80 colunas e 28 linhas (com vesamenu.c32), valores negativos de linha são calculados a partir deste valor.

MENU WIDTH 80
MENU MARGIN 10
MENU PASSWORDMARGIN 3
MENU ROWS 12
MENU TABMSGROW 18
MENU CMDLINEROW 18
MENU ENDROW -1
MENU PASSWORDROW 11
MENU TIMEOUTROW 20
MENU HELPMSGROW 22
MENU HELPMSGENDROW -1
MENU HIDDENROW -2
MENU HSHIFT 0
MENU VSHIFT 0


quarta-feira, 21 de novembro de 2012

Instalação do Cinelerra

Instalação do Cinelerra no Linux Caixa Mágica 18 LTS (baseado em ubuntu 12.04 LTS).

Foi necessário remover o pacote mpeg3-utils para se conseguirem instalar os pacotes de dependência do cinelerra.

Servidor NFS

Ficheiro a editar: /etc/exports

# Partilha para um host específico 192.168.0.2
/srv/images      192.168.0.2/255.255.255.0(no_root_squash,rw,async,no_subtree_check)
# Partilha para a rede
/srv/images      192.168.0.0/255.255.255.0(no_root_squash,rw,async,no_subtree_check)

# Partilha para todas as redes
/srv/images      *(no_root_squash,rw,async,no_subtree_check)
Para carregar as alterações:
# exportfs -ra

quarta-feira, 31 de outubro de 2012

Alteração do nome das interfaces de rede

Por vezes a designação das interfaces de rede de uma máquina não é a mais "correta", podendo ter interfaces salteadas entre elas.

Quando montei um servidor ubuntu 12.04 LTS com LAN onboard e mais três placas PCI, fiquei com a seguinte ordem:

  • eth0 - PCI1
  • eth1 - PCI3
  • eth2 - onboard
  • eth3 - PCI2
Para resolver a situação segui as preciosas instruções do Paolo Iannelli[1]:

  • Editar o ficheiro /etc/udev/rules.d/70-persistent-net.rules
  • Procurar uma linha imensa que começa e depois termina
    SUBSYSTEM=="net", ACTION=="add", (...) KERNEL=="eth1", NAME="eth1"
  • Alterar o valor do eth do NAME para o valor desejado e guardar.
  • Alterar as configurações de rede e afins em conformidade com os novos nomes
  • Reiniciar o serviço de rede

Recursos:

[1] http://www.paoloiannelli.com/2011/05/25/how-to-rename-network-interface-in-ubuntu-debian-suse-linux/ - Página de Paolo Iannelli que explica a alteração da designação das interfaces

terça-feira, 30 de outubro de 2012

iptables - Bloqueio de um cliente NAT

Após muitas pesquisas, nunca consegui resolver este problema:

Utilizando um router linux com iptables e NAT, como bloquear a rede a apenas um cliente.

Vários tutoriais e afins indicam a ação sobre a chain INPUT algo do género:
iptables -A INPUT -s 192.168.x.y -j DROP

Contudo, o cliente continua a enviar e a receber pacotes...

Como dizem que uma imagem vale mais do que mil palavras, só percebi realmente o funcionamento do iptables após, por acaso, deparar-me com um site[1] muito extenso e que no meio continha a seguinte imagem:
Após analisar o fluxo, e efetuar alguns testes, percebi finalmente que depois do NAT os pacotes poderiam ter dois caminhos, e testei o segundo: utilizar a chain FORWARD.

Assim, para bloquear o acesso de um cliente NAT por IP:
iptables -A FORWARD -s 192.168.10.10 -j DROP


Para bloquear o acesso de um cliente NAT por MAC:
iptables -A FORWARD -m mac --mac-source aa:bb:cc:dd:ee:ff -j DROP






Notas:
[1] http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html - Um tutorial muito interessante que permitiu finalmente chegar à solução.
[2] http://www.linuxguruz.com/forum/viewforum.php?f=35 - Coleção de diversos scripts e ligações sobre firewalls