SSH ao Raspberri

Um dia destes ao falar com um amigo meu que tinha comprado um raspberry, perguntei todo entusiasmado o que já tinha feito quando ele triste me responde que “dá muito trabalho escrever o comboio de comandos que aparecem nos artigos!”
Bom, sei que isto parece estranho de dizer mas os maluquinhos de Linux são tão preguiçosos como os outros e fazem tudo para facilitar a vida no dia-a-dia!
Para  acedermos a um Raspberry e inserir os comandos que vemos na Internet não precisamos de escrever no teclado local. Podemos fazer isso com um “copiar & colar”, a partir do nosso computador pessoal, usando para isso um protocolo de nome SSH. Aliás, podemos fazer tudo como se tivéssemos ligados directamente ao Raspberry desde que este esteja ligado pelo menos com o cabo de rede, no mesmo Router onde o nosso computador pessoal está ligado. A única informação que precisamos é de saber qual o IP do nosso Raspberry. Para isso basta ver no arranque do nosso Raspberry o IP:
raspberry_piNeste caso é o IP 192.168.1.15.

Também é possível ver com o comando ifconfig:
raspberry_pi1Neste caso é o IP 192.168.1.70

Assim, já temos como aceder ao nosso Raspberry. Vamos imaginar que o IP do nosso Raspberry é o 192.168.2.100 e que o utilizador é o “pi“.
Em Linux ou em OSX abrimos uma consola e escrevemos “ssh pi@192.168.2.100“. Se o sistema conseguir chegar ao nosso Raspberry, vai ser pedida a password (por defeito é Raspberry). E pronto, é como se estivéssemos ligados directamente no nosso Raspberry!

Em Windows podemos usar um programa muito simples mas poderoso, de nome Putty. O programa não exige instalação e é um só ficheiro.
putty-defaultNo hostname escrevemos o IP do nosso Raspberry e clicamos em Open. Abre-se uma janela de consola onde inserimos o utilizador e password. E pronto! Já podemos copiar os comandos dos milhares de projectos que há pela Internet para o nosso Raspberry, sem ter que os escrever. Para “colar” no Putty basta clicar com o botão direito do rato na consola.

Bons projectos! 🙂

MySQL na CLI


MySQL é um sistema de gestão de base de dados, que usa a linguagem SQL. Parceiro inseparável de qualquer aplicação minimamente complexa executada a partir de um browser, é bastante popular  no conjunto LAMP. Há outros sistemas do género como o MariaDB (fork do MySQL), PostgreSQL, Microsoft SQL Server, entre outros.
Muitas vezes encontro aplicações que usam um acesso ao MySQL com a password root para acesso a uma base de dados… Para além de inseguro e altamente perigoso, deixa-me de cabelos em pé 🙂
No caso do Microsoft SQL Server, temos uma consola gráfica toda bonita para criar e gerir bases de dados.
No caso do MySQL ou instalamos o phpMyAdmin ou então temos a linha de comandos…
Quando estamos a instalar uma qualquer aplicação que usa o sistema LAMP, tipo WordPress, Webmin, Owncloud, etc, temos de configurar uma base de dados. Para isso devemos criar uma só para o que estamos a instalar e com direitos limitados sobre o resto do sistema. Assim, mesmo que descubram os acessos não deverão pôr em causa a segurança do resto do sistema. Como criar? Na consola começamos por entrar na consola MySQL:

mysql -u root -p

Vai ser pedida a password de admin do MySQL (definida na instalação do MySQL)
Vão ficar na CLI do MySQL:

mysql>

Não esqueçam que no fim de qualquer comando tem de terminar a linha com um ponto e virgula. No fim de cada linha cliquem no Enter.
Vamos então criar um utilizador local e definir a palavra-passe:

mysql> CREATE USER ‘utilizador‘@’localhost’ IDENTIFIED BY ‘123456789‘;

Alterem as palavras a bold para o que quiserem.
Agora vamos criar a base de dados:

mysql> CREATE DATABASE 123_nome;

Alterem a palavra a bold para o que quiserem.
Em seguida damos privilégios totais de administração desta nova base de dados para o novo utilizador:

mysql> GRANT ALL PRIVILEGES ON 123_nome.* TO ‘utilizador‘@’localhost’;

Mais um Enter e temos a configuração feita! Falta então aplicar o que fizemos:

mysql> FLUSH PRIVILEGES;

E pronto, podemos usar este utilizador na nossa aplicação, sem pôr em causa a segurança de outras bases de dados.
Para sair da CLI do MySQL executem o comando:

mysql> quit

 

Raspberry & Cloud

Recebi há dias a mais recente versão do Raspberry Pi! Mais potente e melhor equipado, o novo Raspberry 2 Modelo B destaca-se da anterior versão por ter um ARMv7 Quad core @ 900MHz, 1GB RAM, entre outras caracteristicas. O fabricante garante 6x mais performance relativamente à versão anterior.

Com a minha habitual euforia de brinquedo novo na bancada, tive que decidir qual o primeiro projeto para testar o bicho…
Dispensa apresentações. É das melhores senão a melhor solução open-source para a nossa “nuvem” privada. Já vai na versão 8.

Vamos então para o nosso plano de trabalho:
HARDWARE
1 Raspberry com cartão microSD de 8GB Classe 10
1 Pen ou Disco externo USB para armazenamento de dados
SOFTWARE
Sistema operativo Raspbian
Instalação de LAMP (Apache + MySQL + PHP)
Instalação e configuração inicial do ownCloud

Vou partir do princípio que o raspberry está com a versão Raspbian instalada, configurada e atualizada. O site do Raspberry tem bons tutoriais para esse efeito.

1- Preparação da PEN/HDD USB com o seguinte comando:
sudo fdisk -l
Na resposta deverá aparecer alguma coisa tipo:
Device Boot           Start         End           Blocks      Id  System
/dev/sda1   *        2048    30297215    15147584    c  W95 FAT32 (LBA)
Poderá aparecer sdb, sdc, etc. No meu caso é uma PEN USB de 16GB.
Vamos formatar  o nosso /dev/sda1 com EXT4, um formato nativo de Linux:
sudo mkfs.ext4 /dev/sda1
Em seguida criamos a pasta onde a informação da nossa nuvem vai ficar guardada e montamos a nossa PEN/HDD USB:
sudo mkdir /cloud
sudo mount /dev/sda1 /cloud
Podem alterar o nome da pasta /cloud para o que quiserem.
Damos as permissões corretas à pasta criada (para depois o ownCloud funcionar bem):
sudo chown www-data:www-data /cloud
Para tornar este mount permanente fazemos o seguinte:
sudo nano /etc/fstab
Deverá aparecer a seguinte informação:
proc                       /proc           proc    defaults                 0       0
/dev/mmcblk0p1  /boot            vfat    defaults                 0       2
/dev/mmcblk0p2  /                   ext4    defaults,noatime  0       1
É só acrescentar:
/dev/sda1              /cloud       ext4    defaults               0       2

Pronto, o nosso raspberry já pode reiniciar.

2- Vamos configurar agora o nosso raspberry como um servidor LAMP (Apache + MySQL + PHP) e instalar o necessário para a nossa “nuvem” pessoal:
sudo apt-get install apache2 mysql-server php5 php-pear php5-mysql php5-gd php5-curl
Na instalação do MySQL o sistema vai pedir-nos para definirmos uma password de root (não tem nada a haver com o root de sistema).

3- Vamos tornar o nosso MySQL mais seguro:
sudo mysql_secure_installation
Caso tenham dúvidas vejam um bom exemplo aqui.
Vamos aproveitar para criar um utilizador MySQL e a base de dados para o ownCloud:
mysql -uroot -p
Insiram a password definida na instalação do MySQL. Criamos primeiro o utilizador:
CREATE USER ‘username’@’localhost’ IDENTIFIED BY ‘password’;
Alterem o username e a password para o que quiserem. Não esqueçam os ‘ e o ; no fim! Agora vamos criar a base de dados e dar permissões ao user criado:
CREATE DATABASE cloud_db;
GRANT ALL PRIVILEGES on cloud_db.* to username@localhost;
FLUSH PRIVILEGES;
exit
Podem (e devem) alterar o nome da cloud_db para o que quiserem.
E pronto. Vamos para a etapa seguinte!

4- Vamos agora ativar o SSL. Começamos por gerar uma chave:
sudo mkdir /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 1001 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
Podem alterar os dias para o numero que quiserem. Respondam às perguntas seguintes. Por fim, vamos editar o ficheiro seguinte:
sudo nano /etc/apache2/sites-available/default-ssl
Logo por baixo de ServerAdmin coloquem
ServerName nome_da_maquina.com:443
O nome nome_da_maquina.com é o FQDN. Em caso de dúvida coloquem server.lan.
Mais abaixo, alterem o caminho dos certificados:
SSLCertificateFile    /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
Salvamos o ficheiro e finalizamos com os seguintes comandos:
sudo a2ensite default-ssl
sudo a2enmod ssl

sudo service apache2 reload
Podem testar abrindo o browser no https://ip_do_raspberry

5- Descarregamos a versão mais recente do ownCloud (à data deste post), descompactamos o ficheiro e copiamos para a pasta www:
wget https://download.owncloud.org/community/owncloud-8.0.0.tar.bz2
tar -xvf owncloud-8.0.0.tar.bz2
sudo rm  /var/www/*
sudo cp owncloud/* /var/www/ -r

Corrigimos as permissões:
sudo chown -hR www-data:www-data /var/www/
(este comando permite ao apache ter controlo total da pasta do ownCloud)

Vamos então configurar o ownCloud:
https://ip_do_raspberry
Se tudo correu bem vão encontrar o seguinte ecrã, onde poderão criar um utilizador de administração e inserir a informação previamente criada:
E pronto, já podem começar a configurar a vossa nuvem pessoal!Podem começar por configurar as opções gerais, no menu de administração:
Boa nuvem! 🙂

Screen

Há uns tempos falei do putty para aceder por cabo série aos nossos equipamentos. No entanto podemos usar o terminal do nosso Ubuntu e variantes com um programa de seu nome Screen.
Screen é um gestor de sessões virtuais e que permite (entre outras coisas) aceder a um equipamento (routers, switchs, etc) por ligação série.

Começamos por instalar:
$ sudo apt-get update && apt-get install screen

Se o nosso utilizador ainda não pertence ao grupo dialout adicionamos:
$ sudo adduser
utilizador dialout
Assim podemos aceder à ligação série como utilizador sem privilégios (sem o sudu).

Por fim, ligamos ao equipamento que pretendemos:
$ screen /dev/ttyUSB0 9600

onde:
ttyUSB0 é o adaptador USB/RS232 (caso usem uma porta série usem ttyS0)
9600 é o baudrate (pode variar, depende das especificações do equipamento)

Para sair da sessão usamos a sequência de teclas:
Ctrl + A + D

Para voltar à sessão escrevemos:
$ screen -r

Para encerrar a sessão fazemos:
$ screen -X -S [ID da sessão] quit

onde [ID da sessão] pode ser obtida com o comando
$ screen -ls

Screen tem mais vantagens já que permite manter um processo em execução, mesmo que fechemos a consola. Podemos ter várias sessões em simultâneo. Isto pode ser útil em situações em que queremos executar um processo e desligar a sessão sem que esse processo termine. Leiam o manual e bons comandos! 🙂

 

 

It’s PopCorn Time :)

 

logo-valentines

Conhecem? 🙂

Esta ferramenta fantástica permite ver filmes e séries usando a tecnologia P2P, mais conhecida por torrents. Tem boa qualidade e inclui legendas em PT. Apesar de em alguns países isto ser considerado ilegal, na realidade a aplicação em si não tem nada de ilegal…
Bom, legalidades à parte, a aplicação está disponível para Android, OSX, Linux e Windows. Podem ver a página aqui.
Como instalar em Ubuntu e derivados? Muito fácil:

Instalar por PPA – Executar na consola:

sudo add-apt-repository ppa:webupd8team/popcorntime
sudo apt-get update
sudo apt-get install popcorn-time

O programa vai aparecer no menu 🙂 It’s popcorn-time 🙂
Na primeira vez que o programa abre podemos definir a linguagem preferida das legendas. Para isso cliquem na roda dentada no canto superior direito. No campo das legendas (ou subtitles caso a interface esteja em inglês) podem escolher a nossa língua.
E pronto, bons filmes 🙂
Popcorn-time

Ubuntu em domínio .local

dns

Para quem usa Ubuntu numa rede empresarial frequentemente encontra desafios para realizar tarefas que estão “feitas” para ambiente Microsoft. Isto não é uma crítica, é a realidade.
Se tentarem procurar computadores ou servidores num domínio .local (empresa.local), o vosso Ubuntu vai dar erro de DNS. Isto porque nativamente o Ubuntu usa o Avahi para fornecer resolução de nomes via Multicast DNS (às vezes também conhecido como Zeroconf ou Apple Bonjour), o que permite a resolução de nomes usando o domínio mDNS .local ad-hoc.
Mas há uma solução para ultrapassar isto! Na consola vamos editar uma linha num ficheiro chamado nsswitch.conf:

sudo nano /etc/nsswitch.conf

Vão encontrar a seguinte linha:
hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

Alterem para:
hosts:          files dns mdns4_minimal [NOTFOUND=return] mdns4

E pronto, problema resolvido 🙂

LibreOffice no Ubuntu

libre

Saiu recentemente do forno da The Document Foundation uma nova versão do LibreOffice, a versão 4.3.4.
Para quem pretende atualizar facilmente o LibreOffice por repositório para a versão mais recente basta executar os seguintes comandos:

sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get dist-upgrade

Caso o programa não apareça em português, basta  instalar o pacote pt:

sudo apt-get install libreoffice-l10n-pt

E já está! 🙂

Putty no Ubuntu

putty

Quem administra routers e outros equipamentos cujo meio de acesso à configuração é através de uma consola, em Windows usa o fantástico Putty.
No entanto esta ferramenta também existe para Linux e funciona muito bem em Ubuntu!

Para instalar basta o seguinte comando:
sudo apt-get install putty

E pronto, está instalado.

Há dois pormenores a partilhar:

1 – Para se usar o putty como utilizador regular (sem direitos administrativos) numa porta local (COM ou USB) é necessário que o utilizador pertença ao grupo dialout. Para tal basta executar o seguinte comando:
sudo adduser utilizador dialout
Teremos que terminar sessão para tornar esta alteração efectiva.

2 – Em Windows,  quando queremos executar um “copiar-colar” a informação que queremos copiar é selecionada com o botão esquerdo do rato. Para efetuar o “colar” clicamos com o botão direito. Em Linux, a ação de “colar” é feita com o botão do meio ou a “roda” do nosso rato.

Boas ligações! 🙂

Poodle fix

Pois é… Há uma nova ameaça para as comunicações seguras na Internet, de seu nome Poodle:
PoodleA Google trouxe a público neste documento a descoberta, como o ataque é feito e quais as consequências.  Nos próximos tempos irá aparecer um fix para este problema mas entretanto podemos proteger os nossos servidores caseiros (e não só) desativando pura e simplesmente o protocolo SSL v2 e v3. Esta situação só se aplica caso usem páginas HTTPS nos vossos servidores. Com este fix “obrigam” o vosso servidor a usar encriptação TLS.

Acedam ao servidor e abram o ficheiro de configuração do Apache. A localização pode variar mas no Ubuntu, por defeito está em /etc/apache2/apache2.conf:
nano /etc/apache2/apache2.conf

Adicionem a seguinte linha:
SSLProtocol All -SSLv2 -SSLv3

Salvem o ficheiro e no fim é só reiniciar o serviço Apache:
service apache2 restart

E pronto, podem testar neste site se já tem o SSLv3 desativado.

Backup do Raspberry

Para mim, o único defeito do fantástico Raspberry é o sistema de armazenamento de dados assentar num cartão SD. Bem que podia ter uma interface SATA mas… o seu preço não seria o que é! Resta aceitar e tomar as devidas precauções para não apanharmos sustos de cada vez que reiniciamos o sistema ou quando inadvertidamente retiramos a energia eléctrica.

Podemos sempre fazer backup dos dados para uma pen USB ou para um servidor remoto via FTP mas muitas vezes fazemos alterações e personalizamos o sistema operativo, o que após uns meses se torna difícil reconstruir do zero e pôr o nosso Raspberry tal e qual estava antes da “desgraça”. Por outro lado, os cartões SD mais usados são por norma de 4 a 32GB. Então, porque não criar uma imagem total do cartão SD?

Começamos então por desligar o nosso Raspi:
sudo poweroff

Esperamos que as luzes se apaguem excepto a vermelha. Podemos então desligar da corrente e retirar o nosso cartão. Inserimos o cartão no nosso computador.  A única preocupação ver é se tem o espaço livre suficiente para albergar o tamanho máximo do cartão no disco do computador.

Em Windows podem usar a ferramenta Win32DiskImager.

Em Linux vamos usar a poderosa ferramenta dd.
Na consola, verificamos primeiro onde está o nosso cartão:
sudo fdisk -l
No meu caso é /dev/sdb
Executamos então o seguinte comando:
sudo dd bs=4M if=/dev/sdb | gzip > /home/utilizador/raspberry.gz
Não vai haver barra de progresso e só resta aguardar que termine. Com este comando o ficheiro criado é automaticamente comprimido.

E pronto, temos o nosso backup realizado! 🙂

Caso pretendam repor a cópia ou trocar de cartão SD basta inverter o processo:
sudo gzip -dc /home/utilizador/raspberry.gz | dd bs=4M off=/dev/sdb

Limpinho, limpinho 🙂