domingo, 17 de fevereiro de 2013

Raspberry Pi - webserver

A instalação de um webserver no Raspberry Pi permitirá ter um webserver com muito baixo consumo energético.
Mais para a frente será pretendido ter o webserver a controlar o Raspberry Pi através de PHP.

Normalmente utiliza-se o apache2 como webserver e o mysql-server para base de dados, mas devido às limitações do Raspberry Pi, a utilização do lighttpd webserver deverá ser mais adequada.

Também o mysql-server revela-se muito voraz em RAM... Após a sua instalação a RAM livre passou de 210MB para apenas 96MB...

Assim, ainda se procuram alternativas... 

1. Instalar lighttpd + php5

Para fazer este setup basta:
$ sudo apt-get install lighttpd php5-cgi

2. Configurar o webserver

A configuração básica necessária implica apenas ativar e configurar o suporte para PHP.

Para ativar o suporte para PHP no lighttpd:
$ sudo lighty-enable-mod fastcgi-php

Depois é necessário localizar o binário do php5-cgi para indicar na configuração do lighttpd:
$ whereis php5-cgi
php5-cgi: /usr/bin/php5-cgi ... ...

$ sudo nano /etc/lighttpd/conf-enabled/15-fastcgi-php.conf 

Confirmar se a o binário está correto:
"bin-path" => "/usr/bin/php5-cgi",

Caso esteja tudo correto, carregar as definições:
$ sudo service lighttpd force-reload

3. Testar o funcionamento

Depois de instalado e configurado resta testar. Para tal basta criar um ficheiro .php, por exemplo:
$ sudo nano /var/www/info.php
<?php
phpinfo();
?>

Abrir um browser e introduzir http://a.b.c.d/info.php
Onde a.b.c.d é o IP do Raspberry Pi.

Eletrónica e Raspberry Pi

Para além da excelente vertente relativa ao Sistema Operativo e demais software possível de correr no Raspberry Pi, existe a Eletrónica.

1. Interface Eletrónica do Rpi

O Raspberry Pi possui uma interface com esta finalidade que se designa de GPIO (General Purpose Input Output).
Esta interface possui 26 pinos que podem ser: 5V, 3V3, GND ou de Input/Output.

Consoante o modelo do Rpi existem diferentes layouts destes pinos.

Uma boa fonte de informação sobre isto está no Raspberry Pi Spy (http://www.raspberrypi-spy.co.uk/2012/06/simple-guide-to-the-rpi-gpio-header-and-pins/).

GPIO Revision 2

2. Esquema para Pisca-Pisca controlado pelo Rpi

Atenção!
Algumas das chamadas de atenção existentes em diversos lados são relativas ao cuidado no desenho e, principalmente, implementação dos circuitos de forma a não "queimar" o Raspberry Pi, pois os pinos de IO do GPIO estão ligados diretamente ao chip da CPU.
Por isso, deve verificar-se sempre o circuito que se vai implementar!

A partir do site indicado anteriormente é possível aceder a inúmeros artigos de interesse.
Um dos mais interessantes para quem se inicia nestas lides é o relativo ao led Pisca-Pisca controlado pelo Raspberry Pi, que se encontra aqui.

Aquando da implementação do circuito numa breadboard convém confirmar tudo. Assim, convém confirmar as ligações do transistor T1 (neste caso um BC547C).

3. Implementação do circuito

Breadboard com o circuito ligado ao Rpi e LED aceso
  • O LED deve ser ligado com o pino mais comprido à resistência R1 e o mais curto ao pino 1 do transistor T1.
  • A resistência R2 deverá ser ligada ao pino 2 do transistor T1.
  • O pino 3 do transistor T1 deverá ser ligado ao GND do Rpi (pino 6).
  • A resistência R1 deve ligar também ao Rpi, neste caso no pino 1 (+3V3).
  • A resistência R2 deve ligar também ao Rpi, neste caso no pino 26 (IO).


4. Python e o GPIO

Para se poder controlar o input e output dos pinos do GPIO através de código python é necessário instalar uma biblioteca, por exemplo: raspberry-gpio-python, disponível para download aqui.

Para saber qual a versão a utilizar é possível executar no terminal do Rpi:
$ python --version
Python 2.7.3

Neste caso será necessário descarregar a biblioteca para a versão 2.

Depois de descarregado o ficheiro, é necessário instalá-lo com:
$ sudo dpkg -i python-rpi.gpio_0.4.2a-1_armhf.deb

Após esta instalação é possível importar para o python a biblioteca que interage com o GPIO.

5. Código Pisca-Pisca em Python

Para testar resta agora criar um ficheiro, por exemplo led.py com o conteúdo:
import RPi.GPIO as GPIO
import time

# Use physical pin numbers
GPIO.setmode(GPIO.BOARD)
# Set up header pin 26 (GPIO7) as an input
pin=26
print "Setup Pin %i" % (pin)
GPIO.setup(pin, GPIO.OUT)

var=1
print "Start loop"
while var==1 :
  print "Set Output False"
  GPIO.output(pin, False)
  time.sleep(1)
  print "Set Output True"
  GPIO.output(pin, True)
  time.sleep(1)

Como o código tem que interagir com o GPIO, é necessário executá-lo com privilégios de root, ou seja:
$ sudo python led.py

Portátil com acesso ao Rpi por SSH e execução do código led.py


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