Escrito por Helio Loureiro
Categoria:

Quem participa dos grupos que faço parte, principalmente no FaceBook, sabem que uma das minhas respostas mais comuns é "leia o guia foca Linux".

O objetivo é trollar quem pergunta, sempre, mas também fazer a pessoa abrir os olhos sobre a documentação que existe na Internet.  Mas claro que é mais fácil perguntar primeiro, e ler depois.  Isso quando lêem.  Também sei que o nome mudou pra "guia foca gnu/linux", mas prefiro chamar pelo nome mais curto.  Questão de simplicidade, mesmo que gladiadores da liberdade não gostem.

O guia surgiu pela iniciativa de Gleydson Mazioli pra suprir uma demanda de material sobre Linux, acessível e em português.  Claro que atualmente abudam os livros, os sites e os blogs, mas na época em que o guia foi lançado isso não era tão verdadeiro assim.  Longe disso.  Era 1999.

O guia ajudou muita gente a iniciar e aprender Linux e Unix.  As bases são quase as mesmas nos últimos 40 anos de Unix (mesmo Linux não sendo Unix).  Mas como tudo em tecnologia, o guia está defasado.  Faltam coisas como systemd, novas distros, e até mesmo sobre git.

Então chegou a hora de poder contribuir.  Se algum dia fez uso de algum material disponível gratuitamente na Internet como o guia foca gnu/linux, ou mesmo do guia em si, aproveite pra contribuir e melhorar o mesmo, para que mais pessoas possam entrar nesse nosso mundo tão pequeno de software livre.

Eu criei um repositório do guia no GitHub: https://github.com/helioloureiro/guiafocalinux

basta fazer um clone do dele, criar ou atualizar os documentos e mandar seus pull requests.

Não é um fork do guia.  A idéia é melhorar o guia com atualizações e enviar as sincronizações pro próprio Gleydson, para atualizar no site.

Como contribuir?  O guia está escrito em SGML, que é um tipo de HTML mais direcionado para documentos.  Mas não precisa ficar preocupado com isso.  Basta adicionar o documento que queira implementar, e depois eu dou uma revisada e adiciono as tags necessárias.  O importante é escrever.  Se quiser começar de forma mais simples, pode editar um dos arquivos existentes e atualizar o mesmo.  É necessário utilizar o pacote debiandoc-sgml para ter os templates usados no documento no lugar e poder gerar o guia.  Então é mais fácil usar um Debian/Debian-alike como distro.  Claro que não é necessário e Docker sempre pode ajudar se for preciso.

Até agora eu converti somente os arquivos de iso-8859-1 para utf-8 e criei um Makefile para gerar o guia em pdf.  O próximo passo será descrever systemd.  E você?  Já pensou em como vai contribuir?

Aguardo seus pull requests :)

Escrito por Helio Loureiro
Categoria:

Quando li sobre docker e containers pela primeira vez, meu pensamento foi "ah... outra forma de ter uma VM".  Eu não sabia das facilidades que isso gerariam no meu dia-a-dia de trabalho em relação aos outros métodos de virtualização.

Docker, ao contrário de outras formas de virtualização, não é um sistema isolado onde se carrega um sistema operacional inteiro.  Por exemplo em KVM/Qemu ou KVM/Xen é possível instalar Windows, Android ou FreeBSD pois é um sistema completo de virtualização, que emula até uma camada de BIOS.  Já containers, como o Docker, não.  Eu não consigo rodar outro sistema que não seja aquele que roda na minha máquina em termos de versão de kernel e libc.  Então enquanto Qemu e Xen rodam em servidores com Linux ou FreeBSD, Docker é inerente somente ao Linux.

A parte de containers é relativamente nova no Linux.  Ela já existe faz uns 10 anos no FreeBSD com jails e mais ainda em Solaris com o zoneadm.  Depois que implementaram o cgroups no kernel que Linux começou a explorar essa possibilidade.  Os primeiros containers que surgiram no Linux foram através de LXC, que criava um segundo ambiente dentro do seu.  Em FreeBSD e Solaris containers significam compartilhar seu sistema em vários pequenos sistemas, o que faz sentido afinal, mas em Linux... Linux é um kernel.  Dizemos Linux por simplicidade, mas o sistema operacional que inclui kernel, Linux, e aplicativos, GNU por exemplo, é o que chamamos de distro.  Ubuntu é um sistema operacional, RedHat é outro sistema operacional, Debian outro ainda e assim por diante.  Então eles não rodam com as mesmas bibliotecas, nem usam o mesmos sistemas de pacotes.  E isso é um problema.  Os containers em LXC são capazes de criar um ambiente baseado no que está rodando, mas não uma outra distro dentro dessa distro original.

Nesse ambiente de possibilidades surgiu o Docker.  Docker permite rodar um container que tenha uma outra distro completamente diferente daquela que roda no sistema principal.  Mais ainda: Docker tem um repositório no estilo de GitHub que permite carregar ou baixar máquinas virtuais criadas por outras pessoas.

Então basta instalar Docker para começar a brincar.  Apesar de ter servidores Debian, eu rodo bastante Docker no meu laptop.  Então sei o procedimento pra Ubuntu via ppa, mas acredito que Debian deve ser bem parecido.  Outras distros não devem ser muito diferentes.

Instalando Docker no Ubuntu

Adicione diretamente o repositório nas configurações de fontes do apt:

root@laptop:~# cat << EOF > /etc/apt/sources.list.d/docker.list
deb https://get.docker.io/ubuntu docker main
EOF

Depois atualize a listagem de pacotes disponíveis e instale docker.io.

root@laptop:~# apt-get update; apt-get install docker.io

Então é preciso adicionar seu usuário ao grupo docker pra poder rodar sem precisar usar "sudo":

root@laptop:~# usermod -a -G docker helio

Reiniciada sua sessão (não precisa rebootar), docker deve estar disponível pra uso. 

Docker - primeiros passos

Com o Docker é possível verificar quais imagens estão disponíveis pra uso no repositório público.

helio@laptop:~$ docker search centos
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                          The official build of CentOS.                   1575      [OK]       
ansible/centos7-ansible         Ansible on Centos7                              60                   [OK]
jdeathe/centos-ssh-apache-php   CentOS-6 6.6 x86_64 / Apache / PHP / PHP m...   11                   [OK]
blalor/centos                   Bare-bones base CentOS 6.5 image                9                    [OK]
jdeathe/centos-ssh              CentOS-6 6.6 x86_64 / EPEL/IUS Repos / Ope...   8                    [OK]
torusware/speedus-centos        Always updated official CentOS docker imag...   7                    [OK]
million12/centos-supervisor     Base CentOS-7 with supervisord launcher, h...   7                    [OK]
nimmis/java-centos              This is docker images of CentOS 7 with dif...   6                    [OK]
feduxorg/centos                                                                 3                    [OK]
nathonfowlie/centos-jre         Latest CentOS image with the JRE pre-insta...   3                    [OK]
centos/mariadb55-centos7                                                        2                    [OK]
tcnksm/centos-node              Dockerfile for CentOS packaging node            2                    [OK]
nathonfowlie/centos-jira        JIRA running on the latest version of CentOS    1                    [OK]
feduxorg/centos-postgresql      Centos Image with postgres                      1                    [OK]
lighthopper/orientdb-centos     A Dockerfile for creating an OrientDB imag...   1                    [OK]
yajo/centos-epel                CentOS with EPEL and fully updated              1                    [OK]
layerworx/centos                CentOS container with etcd, etcdctl, confd...   1                    [OK]
feduxorg/centos-apache          Run Apache Event MPM on Centos                  1                    [OK]
blacklabelops/centos            Blacklabelops Centos 7.1.503 base image wi...   0                    [OK]
feduxorg/centos-rack            Centos to run rack applications like Ruby ...   0                    [OK]
jsmigel/centos-epel             Docker base image of CentOS w/ EPEL installed   0                    [OK]
lighthopper/openjdk-centos      A Dockerfile for creating an OpenJDK image...   0                    [OK]
jasonish/centos-suricata        Suricata base image based on CentOS 7.          0                    [OK]
pdericson/centos                Docker image for CentOS                         0                    [OK]
feduxorg/centos-geminabox       Gem in a box on centos                          0                    [OK]

É possível adicionar outros repositórios e, claro, fazer sua própria instalação.  Um problema sobre esse repositório público é que não existe garantia de não ter um malware junto.  Se o seu uso for como o meu, corporativo, não use.  Se for pra brincar e testar, vale o tempo.

A beleza do Docker é que pra rodar, basta chamar o comando.  Se o container não existe, ele busca imediatamente no repositório e roda.

helio@laptop:~$ docker run -it centos bash
Unable to find image 'centos:latest' locally
latest: Pulling from centos
47d44cb6f252: Pull complete 
168a69b62202: Pull complete 
812e9d9d677f: Pull complete 
4234bfdd88f8: Pull complete 
ce20c473cd8a: Pull complete 
centos:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:3aaab9f1297db9b013063c781cfe901e2aa6e7e334c1d1f4df12f25ce356f2e5
Status: Downloaded newer image for centos:latest
[root@1512dcd70309 /]# hostname 
1512dcd70309

Então, em outro terminal é possível ver a instância de Docker ativa.

helio@laptop:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
1512dcd70309        centos:latest       "bash"              2 minutes ago       Up 2 minutes                            jolly_sinoussi      

A cada nova chamada pra rodar Docker, uma nova instância é criada.

helio@laptop:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
3b48633e67cc        centos:latest       "bash"              8 seconds ago       Up 6 seconds                            romantic_turing     
1512dcd70309        centos:latest       "bash"              4 minutes ago       Up 4 minutes                            jolly_sinoussi      

Como se deve imaginar, cada instância de Docker é completamente diferente uma da outra.  E não persistente.  Uma vez terminada a sessão, os dados adicionados são removidos.  Assim, se aplicar um upgrade no container e quiser manter, tem de criar um "snapshot" dele. Então pra salvar uma atualização no container:

[root@1512dcd70309 /]# yum update
Loaded plugins: fastestmirror
base                                                                                                                                              | 3.6 kB  00:00:00     
extras                                                                                                                                            | 3.4 kB  00:00:00     
systemdcontainer                                                                                                                                  | 2.9 kB  00:00:00     
updates                                                                                                                                           | 3.4 kB  00:00:00     
(1/5): base/7/x86_64/group_gz                                                                                                                     | 154 kB  00:00:00     
[... várias coisas seguem...]

é preciso fazer:

helio@laptop:~$ docker commit -m "Atualizado com yum update" 1512dcd70309 centos-atualizado
ff0f333c4abd4d9045ff074121df8fea7d109e87cc1dcb88317254fa0cfd66e4

É preciso usar o ID do container uma vez que várias instâncias podem existir originados da mesma imagem "centos".  Pra verificar suas imagens de containers, basta usar: 

helio@laptop:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos-atualizado   latest              ff0f333c4abd        40 seconds ago      269.9 MB
fedora2             latest              d97facef5329        31 minutes ago      398.7 MB
fedora              latest              c7d2f0130dae        5 days ago          204.3 MB
centos              latest              ce20c473cd8a        3 weeks ago         172.3 MB
susebuilder4        latest              97c67ab3589f        4 weeks ago         882.1 MB
susebuilder3        latest              15af476bea7b        4 weeks ago         784.6 MB
susebuilder2        latest              299ff2fa953d        4 weeks ago         685.6 MB
susebuilder         latest              9ca4e4487b77        4 weeks ago         661.3 MB
kiwi                latest              a037d86af491        12 weeks ago        436.7 MB
aekeroth/synapse    latest              a56b155c49a4        5 months ago        450.4 MB

 Pra remover alguma dessas images, como por exemplo esse aekeroth/synapse que nem lembro o motivo de estar ali, onde todos os "snapshots" relacionados serão removidos também:

helio@laptop:~$ docker rmi aekeroth/synapse
Untagged: aekeroth/synapse:latest
Deleted: a56b155c49a427661055b1a45c9233107b59fc6ec801467f04a29659a8330624
Deleted: b1c70ec40fcc659efd9da36beade75b8c2505c56c53499b231be692e29330d15
Deleted: 051d6978b0a8d3f344c0b6fdbdcae3e172f8e24c839d3969e118f2e6c1c64174
Deleted: b856d151b9c77a47d3d706e64880f898939afeb8312727a8fb5d715ef64ccf86
Deleted: c908ae302de39cb78669241ab2a65dfa1c750eb7f0818820286551bc450b5b0d
Deleted: 8927bb4878535574411efe47e5006049662fffa3f8984288b00ea49436fe5caf
Deleted: a055b38089a89db6f97c4bef2de139ebe06fd56976a87ef442ce6a9f5047497d
Deleted: 1057eb355528fc473af4bb6e9f529fdd70d7b8b02b764bf873166d7650341bd0
Deleted: 7bfe65031a48db2cc6206d6b4af9e52063a7d538a8e3d13b2f6e4f5d888e0f08
Deleted: cec2959569e4d51aee4bcc0409cebfc4a0a46b9d42142e4611c0fe6294824a8b
Deleted: ed5b1f07a6c393d55598770da45ec197be4682bfedabdf26bbab0208d5b7061a
Deleted: 2103b00b3fdf1d26a86aded36ae73c1c425def0f779a6e69073b3b77377df348
Deleted: 4faa69f72743ce3a18508e840ff84598952fc05bd1de5fd54c6bc0f8ca835884
Deleted: 76b658ecb5644a4aca23b35de695803ad2e223da087d4f8015016021bd970169
Deleted: f0dde87450ec8236a64aebd3e8b499fe2772fca5e837ecbfa97bd8ae380c605e
Deleted: 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158

Moby Docker, o monstro mítico dos mares das nuvens

Depois dessa rápida introdução ao Docker e containers, fica a pergunta: cadê a tal vantagem?  Pois precisei fazer uso dela recentemente por causa do LSB, Linux Standard Base.

Quando ouvi falar de LSB achei que era algo como padronização de diretórios como "/opt" e "/usr/local" além de localização de arquivos de inicialização em "/etc/init.d".  É, mas não é só isso. LSB cria uma base comum pra se compilar um binário em uma distro e rodar em outra.  Isso evita precisar ter ambientes diferentes com distros diferentes e versões dessas distros diferentes.  É uma facilidade. Mas... Debian, e consequentemente Ubuntu, não seguem mais a LSB.  Primeiro que é algo complicado, pois envolve verificação de compatibilidade de ABI, segundo que se não tem um interesse econômico, leia-se alguém pra pagar por isso, não vale a pena manter.

Como na empresa desenvolvemos binários pra RedHat e Suse, meu laptop se tornou um local inóspito pra compilar os binários que usamos.  São de OpenSAF, um projeto de software livre, mas é complicado manter um ambiente de compilação pra cada sistema.  E caro.  A solução inicial que adotamos foi instalar servidores com as versões de RedHat e Suse pra podermos compilar e verificar. 

Daí lembrei do Docker :)

Bastou criar um container com os pacotes de compilação necessários como gcc, g++ e rpmbuild.  Mas o repositório está no laptop, que roda Ubuntu.  Como compilar?  Como acessar os dados?

Primeiramente criei um usuário no container Docker com mesmo UID e GID que o meu, pra não criar tudo como root.  Em seguida chamei o Docker com parâmetros pra usar meu filesystem:

helio@laptop:~$ docker run -it -v /home/helio/OpenSAF:/opensaf --user=helio -w /opensaf susebuilder4 ./configure

e pronto!  Binários compilados num ambiente que suporta LSB.  Docker mapeia meu diretório local "/home/helio/OpenSAF" como "/opensaf" no container.  Inicia como usuário "helio" dentro do diretório "/opensaf" e roda o comando "./configure".  E pronto.  Quando termina o comando, o container desaparece.

Sim, saem lágrimas dos olhos de tão lindo.

Docker permite isso.  Imagine então rodar um ambiente virtual com servidor web ou qualquer outra aplicação.  Uma vez terminada, some o container.  Quer aumentar capacidade?  Só criar outro container.  Eu não comentei muito, mas é possível mapear portas locais pra portas internas do container, além de rodar o próprio como daemon.

Docker é um monstro de tão bom.  Não é uma baleia, mas um Moby Docker!  Vale testar.

Escrito por Helio Loureiro
Categoria:

Graças aos entraves do software proprietário, resolvi melhorar minhas opções de uso OpenVPN e com meu roteador DD-WRT. A história toda começou com alguns jogos que comprei numa promoção na Xbox Live no Brasil (é... Microsoft, eu sei...).  Comprei sem problemas, mas não instalei os jogos.  Acontece que depois mudei de país e... quem disse que consigo ativar os jogos?  A bela idéia de que algo que comprou, que é seu, mas não é seu de verdade.  Só o software proprietário te permite entraves assim.

Uma opção que tentei fazer foi através de túnel de DNS, do mesmo tipo que se usa pra Netflix.  Eu tenho o serviço do Unlocator, mas ele não foi suficiente pra passar o bloqueio imposto pela Microsoft.  Consegui baixar o conteúdo, mas o mesmo não executa pela diferença de região.

Então resolvi realmente criar um túnel até o Brasil e sair por um IP de lá.  E pra isso fiz um combo de VPS com AWS (Amazon), OpenVPN e DD-WRT.  Simplesmente levantar uma máquina virtual com Linux (escolhi Ubuntu), iniciar OpenVPN em modo servidor, e conectar a partir do roteador DD-WRT como cliente.

Então aqui estão os passos pra isso.

Chaves e certificados

Tentei uma configuração mais simples de OpenVPN static-home, que existe no diretório de exemplos.  Mas descobri que o DD-WRT não funciona com essa configuração.  E exige toda infraestrutura de chaves, com autoridade certificadora e tudo mais.  Mas existe um pacote Debian/Ubuntu que facilita nessa tarefa: easy-rsa.

Primeiramente, instale o pacote.  Como root:

apt-get install easy-rsa

Note que o comando é rodado em sua máquina de trabalho, como meu laptop no caso.  Nem na VPS nem no roteador.  É importante rodar separado pra poder guardar as chaves para usar depois.

Crie um diretório vpn e faça links simbólicos de todos os scripts instalados pelo easy-rsa.  Todos os passos seguintes não precisam ser feitos como root.

mkdir vpn
cd vpn
ln -s /usr/share/easy-rsa/* .

Crie primeiro o certificado de autoridade certificadora (CA).  Para isso, faça "source" no arquivo vars e em seguinda limpe qualquer configuração com "clean-all".

. vars
./clean-all
./build-ca

Basta ir respondendo as perguntas e criar o certificado com seus dados.

Country Name (2 letter code) [US]:BR
State or Province Name (full name) [CA]:SP
Locality Name (eg, city) [SanFrancisco]:Tucanistao
Organization Name (eg, company) [Fort-Funston]:Loureiro Software
Organizational Unit Name (eg, section) [MyOrganizationalUnit]:Loureiro Engenharia
Common Name (eg, your name or your server's hostname) [Fort-Funston CA]:openvpn
Name [EasyRSA]:
Email Address [Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.]:Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.

Apesar de não ter escrito nada a respeito, acho que fica bem explícito que os dados podem ser fictícios.  Então qualquer coisa serve, apenas para identificar seu próprio certificado, ou melhor, entidade certificadora que assinará as chaves.

Em seguida crie o certificado do servidor e assine.  Basta rodar o comando seguinte que o mesmo pedirá para entrar como uma senha e pra assinar a chave.  Não entre com senha (tecle <Enter> somente), pois isso facilitará a configuração.  Mas selecione pra assinar o certificado.

./build-key-server server

O próximo passo é a criação da chave do DD-WRT.  Para isso use o comando:

./build-key dd-wrt

Assim como no passo do servidor, não entre com uma senha, para tornar as coisas mais simples.

Por último basta gerar os parâmetros de Diffie-Hellman pro servidor (chave pública-privada).  Leva um certo tempo esse passo de geração.

./build-dh

Terminados os passos de geração de certificados e chaves, terá um diretório "keys" com todas as informações criadas:

$ ls -1 keys/
01.pem
02.pem
ca.crt
ca.key
dd-wrt.crt
dd-wrt.csr
dd-wrt.key
dh2048.pem
index.txt
index.txt.attr
index.txt.attr.old
index.txt.old
serial
serial.old
server.crt
server.csr
server.key

Amazon EC2

Através do AWS, a Amazon permite criar uma conta gratuita por 1 ano.  Então pra minha finalidade foi perfeito.  E tem a vantagem de permitir criar o servidor em qualquer lugar do mundo onde a Amazon tenha datacenter.  Isso significa EUA, Brasil, Irlanda, Alemanha, Japão, Singapura e Austrália.  E a criação simplesmente a um clique de distância.

Não vou descrever o processo de criação de uma instância no AWS (máquina virtual) pra não deixar o artigo muito extenso, e também porque existem já bastantes documentos sobre o assunto.  Mas é basicamente clicar pra criar uma instância, decidir o tipo gratuito, que foi Ubuntu no meu caso, e esperar a máquina virtual ser criada e ativada.

É importante permitir a instância receber tráfego na port 1194 com protocolo UDP pra estabelecer a VPN.

Uma vez a instância funcionando, basta instalar o pacote openvpn e copiar as chaves criadas para dentro do servidor.

ssh root@servidor_aws
aws# apt-get install openvpn
aws# exit
scp -r keys root@servidor_aws:/etc/openvpn

Eu resolvi deixar tudo dentro de "/etc/openvpn" pra facilitar a configuração.

A configuração do lado servidor pode ser inserida dentro do arquivo "/etc/openvpn/dd-wrt-server.conf":

dev tun
verb 4 
dh /etc/openvpn/keys/dh2048.pem
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/01.pem
key /etc/openvpn/keys/server.key
tls-server
mode server
client-to-client
persist-key
persist-tun
push "redirect-gateway"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "dhcp-option DOMAIN aws.lan"
keepalive 15 60
server 10.1.0.0 255.255.255.0
auth sha256
cipher aes-256-cbc
link-mtu 1570
comp-lzo

e dentro de "/etc/default/openvpn" basta inserir a linha: 

AUTOSTART="dd-wrt-server"

e reiniciar o daemon de openvpn pra ter tudo funcionando.  O servidor também precisa permitir tráfego e fazer NAT do mesmo, então os seguintes comandos são necessários (e podem ser colocados em scripts dentro da configuração do openvpn):

iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -o eth0 -j MASQUERADE
sysctl -w net.ipv4.ip_forward

Criando um cliente OpenVPN para testar a configuração

DD-WRT não tem uma das melhores formas de debugar conexão.  Então caso queira testar de um outro computador, basta criar um arquivo "dd-wrt-client.conf" com a seguinte configuração:

 

dev tun
remote 52.30.152.15
verb 3
client
remote-cert-tls server
resolv-retry infinite
nobind
persist-key
persist-tun
float
route-delay 30
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/dd-wrt.crt
key /etc/openvpn/keys/dd-wrt.key
comp-lzo

No caso basta apenas trocar a linha "remote 52.30.152.15" pra da VPS no AWS.  Como no servidor, copie as chaves para dentro do diretório "/etc/openvpn/keys" para facilitar a configuração.

Para iniciar o túnel, basta chamar openvpn como root ou via sudo:

sudo openvpn --config dd-wrt-client-conf

e testar se a conexão está estabelecida corretamente.

Finalmente o DD-WRT

No DD-WRT, basta ir na aba de "services/VPN" e habilitar o "OpenVPN".  A configuração é a seguinte:


Em "Server IP/Name", basta colocar o IP da instância da AWS.  Em CA Cert, o certificado da entidade certificadora, basta copiar e colar o conteúdo de "keys/ca.crt".  Em "Public Client Cert" é copiado o conteúdo de "keys/dd-wrt.crt" inteiro, inclusive os dados que estão no início (e que parecem não ser necessários, mas são).  Por último em "Private Client Key" vão os dados de "keys/dd-wrt.key", que é a chave privada.

Terminada a configuração, basta salvar e aplicar pra ter seu túnel OpenVPN iniciado diretamente do roteador.

E deu certo no final?

Não.  Eu mudei minha conta pra UK pra ter conteúdo em inglês.  Então preciso mudar de novo pro Brasil, mudança permitida somente a cada 3 meses, pra ativar os jogos.  Não é à toa que Bill Gates é o homem mais rico do mundo.

De agora em diante, só jogos em mídia digital pro playstation e steam.

Escrito por Helio Loureiro
Categoria:

Ano passado durante uma arrumação das coisas em casa, pra encaixotar e mudar, encontrei um CD do Direto GNU.  Desde então tenho essa idéia de escrever sobre a história do mesmo, mas sempre tinha alguma coisa a mais pra escrever e acabava esquecendo.  Hoje apareceu a oportunidade.

Antes de continuar devo dizer que tudo que escrevo aqui não é fato comprovado.  É algo do tipo "ouvi do porteiro do amigo da cunhada de um sogro de um amigo meu".  Quem quiser saber se o fato é verídico ou não, o melhor é buscar por si mesmo as fontes pois não sou jornalista investigativo buscando um Pulitzer e isso aqui não é um blog que busca pela veracidade de notícias e fatos (não que tudo postado aqui seja mentira).

Direto GNU

O que era ou é esse tal de Direto GNU?

O Direto GNU foi uma das primeiras experimentações de software público com software livre.  Como no início dos anos 2000 o software livre no Brasil tinha sua meca no FISL, em Porto Alegre, nada a se estranhar que o órgão de TI do governo estadual, a PROCERGS, estivesse tocando algo assim.

O Direto GNU era uma suite de aplicativos de mail pra escritórios.  Em termos gerais, era um substituto livre do Exchange server da Microsoft.  Fazia as partes de servidor de mail,  webmail e agenda integrados.  Talvez tivesse algo além disso, mas nunca nem olhei.  Ganhei o CD da PROCERGS num dos FISLs e guardei. 

Meu interesse nunca foi muito além disso pois eu não trabalhava com nada que precisasse do Direto GNU (não era mais sysadmin) e o sistema era feito em Java.  Até hoje eu olho com cara de quem chupou limão galego quando alguém fala em software livre e código em Java. Aliás, como tenho trabalhando bastante com python e Java, eu atualmente olho pra quem programa em Java com uma certa dó, pela falta de conhecimento de algo melhor.

Software livre, nome até com GNU, Copyleft PROCERGS, Java, FISL... até aí estava tudo bem.  Tudo se encaixava nos moldes de software livre no Brasil.  Então... cadê o Direto GNU?  Onde ele foi parar?  Será que foi abandonado pra em pról do uso de Jegue Panel? É aí que entram as partes que são... rumores.  Ou quase...

Software livre e o risco da mistura com política no Brasil

Era software livre?  Boa pergunta.  Eu achava que era.  O CD ao menos mostrava um "Copyleft PROCERGS".  Mas eu resolvi dar uma boa olhada de perto e...

helio@laptop:DiretoGNU$ ls
direto-instalacao  direto-instalacao.tar.gz  Direto.pdf  Fontes  Fontes.zip  Manual Instalacao.pdf  Manual_Instalacao_Pdf.zip  Manual_Usuario_Pdf.zip
helio@laptop:DiretoGNU$ cd Fontes/
helio@laptop:Fontes$ ls
Agenda         AutorizaPresentation.java  Catalogo     DiretoProperties.java  ImapAdminInterface.java  ObjectPool.java             Usuario.java
Applet Editor  BusinessInterface.java     Correio      diretorio              ImapAdmin.java           parseHash.java              Util.java
Autoriza.java  ByteArrayDataSource.java   Direto.java  Hoje                   JDBCConnectionPool.java  PresentationInterface.java
helio@laptop:Fontes$ rgrep -i gpl *
helio@laptop:Fontes$ rgrep -i copyright *                                                                                                                    
Agenda/Evento.java:* Copyright (c) 2000 PROCERGS Projeto Direto.  Todos os direitos reservados                                                                           
Agenda/Reminder.java:* Copyright (c) 2000 PROCERGS Projeto Direto.  Todos os direitos reservados                                                                         
Agenda/Agenda.java:* Copyright (c) 2000 PROCERGS Projeto Direto.  Todos os direitos reservados                                                                           
Agenda/AgendaBusiness.java:* Copyright (c) 2000 PROCERGS Projeto Direto.  Todos os direitos reservados                                                                   
Agenda/EventoExport.java:* Copyright (c) 2000 PROCERGS Projeto Direto.  Todos os direitos reservados                                                                     
Agenda/ReminderThread.java:* Copyright (c) 2000 PROCERGS Projeto Direto.  Todos os direitos reservados                                                                   
Agenda/AgendaPresentation.java:* Copyright (c) 2000 PROCERGS Projeto Direto.  Todos os direitos reservados
Catalogo/OptionsInterface.java:* Copyright (c) 2000 PROCERGS Projeto Direto.  Todos os direitos reservados
Catalogo/CatalogoBusiness.java:* Copyright (c) 2000 PROCERGS Projeto Direto.  Todos os direitos reservados
Catalogo/CatalogoPresentation.java:* Copyright (c) 2000 PROCERGS Projeto Direto.  Todos os direitos reservados
Catalogo/DiretoOptions.java:* Copyright (c) 2000 PROCERGS Projeto Direto.  Todos os direitos reservados
Catalogo/Catalogo.java:* Copyright (c) 2000 PROCERGS Projeto Direto.  Todos os direitos reservados
Correio/FollowUp.java:* Copyright (c) 2000 PROCREGS Projeto Direto.  Todos os direitos reservados
Correio/Correio.java: * Copyright (c) 2000 PROCREGS Projeto Direto.  Todos os direitos reservados
Correio/MailUserData.java: * Copyright (c) 1998 The Java Apache Project.  All rights reserved.
Correio/MailUserData.java: * 1. Redistributions of source code must retain the above copyright
Correio/MailUserData.java: * 2. Redistributions in binary form must reproduce the above copyright
Correio/FollowUpServer.java:* Copyright (c) 2000 PROCREGS Projeto Direto.  Todos os direitos reservados
Correio/CorreioProgramado.java: * Copyright (c) 2000 PROCREGS Projeto Direto.  Todos os direitos reservados
Direto.java:* Copyright (c) 2000 PROCERGS Projeto Direto.  Todos os direitos reservados

Com exceção do software da Apache, o resto era tudo propriedade da PROCERGS.

Qual foi a consequência disso?  Volto a frisar que é um rumor que ouvi do amigo, do amigo, do porteiro do vizinho. Mas ao trocar o governo, com a eventual verificação de caixa - que sempre está baixo pro seguinte - o governador em exercício teve uma idéia brilhante: fechar os fontes e cobrar pelo uso do software.

 

Na época em que fomentavam o Direto GNU o governador do Rio Grande do Sul era Olívio Dutra do PT.  Um dos primeiros políticos que realmente abraçou o uso do software livre em sua administração.  E não somente pra baixar custos, mas pra criar uma vantagem competitiva à região.  E conseguiu, com muito sucesso.  Então todos os órgãos de administração pública do estado adotaram o software.  Empresas de energia elétrica, água, transporte, etc... tudo e todos.

 

Infelizmente a mudança de governo, que sempre acontece de tempos em tempos,  fez uma curva de 180º  nas diretivas de software livre indo totalmente na contra-mão do que existia.  E o novo governador teve uma brilhante idéia pra reforçar a arrecadação da máquina estatal: cobrar pelo software.  E pra cobrar era preciso... fechar o software!

Como a maioria das empresas estaduais já usavam o software, por exigência da administração anterior, virou quase um caso de ser tornar refém de seu uso.  Como o software não existia em repositório, foi fácil mudar tudo pra uma licença proprietária fechada e cobrar pelo uso.  Simples assim.

Foi assim que o DiretoGNU virou um direto na boca do estômago de todo mundo.

Atualmente o governo federal tem um software na mesma linha, o Demoisele, mas o aprendizado do Direto GNU os levou a ter certeza de ter a licença LGPL e de que o software está publicado num repositório externo.  Depois veio também o Expresso, que fica próximo ao Direto GNU em termos de funcionalidade.  Também publicado sob GPL e em repositórios públicos.

Essa foi a lição aprendida em termos governamentais sobre a gestão de conteúdo de software livre.  Mas o seu uso pode ser totalmente abolido caso um novo governo assuma, o que eventualmente deve acontecer, e o mesmo quiser apagar o "legado" do governo anterior.  Por isso é tào importante ter software livre como uma estratégia de crescimento pro país, e não de um partido.  

O software livre não é de direta, nem de esquerda, nem de centro.  É software, e disponível para todos, assim como os algoritmos de matemática.

Escrito por Helio Loureiro
Categoria:

Se sabe usar corretamente, não precisa de nenhuma outra ferramenta.

Escrito por Helio Loureiro
Categoria:

 

Acho que nada dá mais prazer no trabalho que receber um laptop novo.  Tem  gosto de natal.  Em geral esse sentimento de felicidade se dá a cada 3 ou 4 anos, dependendo da política da empresa (e do faturamento, claro).

Ano passado, pela mudança de local e país, eu já tinha recebido um "monstrobook" HP ZBook 15 para trabalhar.  Apesar da versão mais nova de hardware, não era muito diferente do meu antigo laptop, também "monstrobook", que descrevi em "rodando Linux no HP EliteBook 8570w" e que pesava por volta de 5 Kg com a fonte de alimentação.  Notebook parrudo, mas muito, muito pesado.

No final do ano passado recebi a excelente notícia que todos os notebooks corporativos HP deveriam ser trocados pra Dell pros que usavam Linux, que é meu caso.  Felicidade transbordando, vamos às compras.

Entre as opções corporativas, vários notebooks, vários latitudes e inspirions.  Notebooks bons, mas sem muita diferença pra o que eu já tinha antes.  Então resolvi arriscar e pegar um ultrabook, ainda mais um que tinha a cara do que eu queria: Dell XPS 13 Ubuntu Developer Edition.  Eu nunca tinha usado um laptop tão pequeno e principalmente sem drive de CD/DVD.  Mas se Linus Torvalds trabalha num MacBookAir, então resolvi arriscar em algo parecido.

Não vou comentar muito da parte burocrática, pois foi algo chato e que não acrescenta muito.  Apenas que o laptop demorou uma eternidade pra chegar por ser teclado US e quando chegou, veio com o teclado nórdico.  No fim a Dell mandou outro laptop ao invés de trocar o teclado.  Excelente serviço pós-venda deles.  Ao menos pros clientes corporativos.

E gravei o unboxing do brinquedo novo (aliás, como é difícil abrir e desempacotar tudo com uma só mão):

https://youtu.be/dLMlmMiZ_aY

Do laptop, nada a reclamar.  Leve, muito leve.  Algo como 1,2 Kg sem a fonte, que também é pequena.  Parte externa metálica.  E bateria que dura por volta de 6 horas.  Isso mesmo.  Eu passo quase que o dia inteiro trabalhando sem conectar na energia.  Coisa maravilhosa.

A placa de vídeo não é das mais fortes.  É uma placa Intel Broadwell-U.  Funciona bem com os kernels mais novos (estou rodando o 4.1.2 no momento) mas tem alguns problemas pra usar monitor externo na versão de Ubuntu que vem de fábrica.

Falando no Ubuntu, sim eu tive de remover.  Nada contra Ubuntu ou algo assim, mas usamos uma versão corporativa dele na empresa.  Então tive de remover o Ubuntu 14.04 que veio instalado pra instalar... Ubuntu 14.04.

O sistema roda redondo, sem problemas de driver ou algo do gênero.  Vantagem do árduo esforço da Intel junto ao Linux pra implementar seus drivers.  Bluetooth, wifi, controle de volume pelo teclado, tudo, absolutamente tudo sai funcionando de primeira em Linux.  Mais precisamente Ubuntu, mas acredito que não será diferente com outras distros.

O único ponto bizarro dele é mesmo a webcam, que fica na parte de baixo da tela.  Então eu fico com um certo olhar de superioridade em todas as conferências que faço via skype ou algo do tipo.  Eu já sabia desse ponto, mas não diria que é um ponto negativo a ponto de abandonar a aquisação dele.

 

Outro ponto que é um limitante é a memória RAM.  Pra manter o sistema compacto o suficiente pra caber tudo num ultrabook, a memória RAM é soldada diretamente na placa mãe.  Com isso, nada de upgrades.  Então a máquina veio com 8 GB de RAM e esses mesmos 8 GB vão ficar por aqui até o fim da vida útil dele.  Sem problemas agora, mas será que não vou achar pouco daqui 3 ou 4 anos?  Bom... só não rodar Java já libera uns 4 GB com certeza.

Outro ponto é que são somente duas portas USB.  USB 3.0, mas só 2.  Então um HUB USB é essencial pra poder conectar mouse, pendrive e HD externo.  Além da interface ethernet quando dá pau no wifi.  Tem saída de vídeo display port, portanto um cabinho display port pra hdmi no DealExtreme é realmente algo necessário.  E tem um mostrador de nível de bateria, que é muito útil quando se desliga o laptop, mas usa a porta USB pra alimentar o celular.  Tem leitor de memória SD que uso de vez em quando e só.  E tudo funcionando lindamente em Linux.

Outro problema que tenho de tempos em tempos é bug com a placa de vídeo.  Conectar em monitores externos e remover, dá uns crashes bonitos no drive da Intel de vez em quando.  Então meu uptime não é muito alto.  Mas sobrevivo bem com o disco SSD que faz o boot em alguns segundos.

 

Dados técnicos (saídas de comandos como lspci, lsusb, etc):

Leia mais:Dell XPS 13 Ubuntu Developer Edition
Escrito por Helio Loureiro
Categoria:

Ainda hoje muita gente mostra supresa quando digo que estou rodando um kernel recém lançado em meu sistema.  Apesar de quase todo mundo saber que Linux é o kernel apenas, uma parte do sistema operacional, pouca gente compila seu próprio kernel. E isso é uma coisa bastante simples com Debian e Ubuntu, ou qualquer outro sistema baseado neles.

Também vejo pessoas distribuindo o kernel em forma de download em sites como 4share, mega, etc.  É legal contribuir com comunidade, mas distribuir um kernel assim, a parte mais vital do sistema, dá brecha de segurança pra que alguém insira um malware ali.  Então evite fazer isso.  E compile seu próprio kernel.

O primeiro passo é ter o código fonte do Linux.  Depois que passou a utlizar o git pra controle de versão (e muito mais que isso), eu também passei a usar o mesmo pra sincronizar meus fontes.  No diretório "/usr/src", como root, crie o repositório git local da seguinte forma:

root@jessie:src# git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

Não é um processo rápido.  O sistema vai baixar mais de 1 GB de arquivos no diretório "/usr/src/linux-stable".

Antes de botar a mão na massa, crie um novo "branch" com a versão que irá compilar.  É possível ver as versões disponíveis pelo comando "git tag -l".  No meu caso eu usei a versão v4.1-rc7.  Então a coisa toda pra listar e criar seu "branch" fica assim:

root@jessie:linux-stable# git tag -l | grep v4.1 
root@jessie:linux-stable# git checkout -b v4.1-rc7 tags/v4.1-rc7

O próximo passo é criar uma configuração de kernel antes de compilar.  Em geral eu copio o arquivo "/root/config-<minha versão corrente>".  Se quiser fazer isso, o comando correto é: 

root@jessie:linux-stable# cp /boot/config-$(uname -r) .

Existem outras maneiras de configurar o kernel, como usando o comando "make menuconfig" ou "make xconfig", entre outros.  Mas é preciso saber exatamente o que se quer do kernel pra configurar o que se realmente deseja.  Uma tarefa não muito fácil pras primeiras compilações.

O passo seguinte é instalar um pacote chamado "kernel-package".  Esse pacote é que faz toda a mágica da compilação e geração de pacotes pra você.  Isso mesmo: ao final do processo terá um kernel seu num arquivo .deb.  Eu já usei isso muito pra compilar em uma máquina e instalar em várias outras.  Voltando ao pacote, instale usado "apt-get", "apt" (novíssimo), ou "aptitude".

root@jessie:linux-stable# apt install kernel-package

O passo seguinte é chamar o kernel-package pra criar o kernel.  Eu pessoalmente uso da seguinte forma:

root@jessie:linux-stable# make-kpkg --initrd --append-to-version "-helio" --bzimage --revision 1 -j 4 kernel_image

O comando passado e os parâmetros são:

  • make-kpkg: é o comando instalado pelo pacote kernel-package.
  • --initrd: criar um sistema de boot initrd (a maioria dos sistema usa).
  • --append-to-version "-helio": pra deixar seu kernel com a sua "cara".  Vai aparecer algo como 4.1.0-rc7-helio na versão dele.
  • --bzimage: criar um kernel comprimido no formato bz.
  • --revision 1: revisão do pacote que será gerado.
  • -j 4: quantas CPUs serão usadas durante a compilação.  Se sua máquina tem múltiplos cores como a minha, basta colocar esse número.  Se não tem ou não sabe, não use esse parâmetro.
  • kernel_image: é o que diz pro kernel-package pra gerar só o pacote .deb do linux-image.  Pode-se criar outros pacotes como source, headers, etc.

Ao iniciar a compilação, o sistema passará por uma etapa de revisão da configuração que foi definida anteriormente.  Todo opção nova passará por uma pergunta se deve ou não ser incluída, ou ficar como módulo (pra ser carregado dinamicamente).  Toda pergunta já vem com alguma sugestão de resposta.  Em geral essa é a melhor opção a menos que realmente saiba o que aquela configuração significa.

Passada essa etapa, pode ir pegar um café.  Um café?  Melhor um bule inteiro.  E pode ir assistir ao último episódio de Game of Thrones que a compilação demora um pouco.

Uma vez terminada, se não tiver nenhum erro, será gerado um pacote com o formato "/usr/src/linux-image-<versão do kernel><nome que você personalizou>_<revisão>_<arquitetura da máquina>.deb".  No meu caso foi o pacote "/usr/src/linux-image-4.1.0-rc7-helio_1_amd64.deb".  Basta instalar e rebootar o computador pra testar a nova versão.

root@jessie:linux-stable# cd ..
root@jessie:linux-stable# dpkg -i linux-image-4.1.0-rc7-helio_1_amd64.deb
root@jessie:linux-stable# reboot

Se por acaso alguma coisa der errado, basta segurar o <Shift> ou <Esc> na inicialização da máquina, antes de carregar o Grub, pra poder ver o menu do mesmo.  Em seguida escolher o kernel que se estava rodando antes e inicializar por ele.  Depois basta remover o kernel criado, algo que e facilitado pela geração do pacote .deb.

root@jessie:linux-stable# dpkg -r linux-image-4.1.0-rc7-helio

Se for compilar o mesmo kernel, mas com opções de configuração diferentes, pode usar outra revisão.  Aliás incrementar a mesma.  Isso aparecerá no pacote gerado, mas não no kernel.

Boa compilação e boa diversão :)

Escrito por Helio Loureiro
Categoria:

Não é um fenômeno recente.  Faz alguns anos que esse sintoma tem aparecido.  Mas não é no mundo todo.  Até o momento só vi isso vindo do Brasil, o mesmo país que pede pela volta dos militares ao poder com a chamada "intervenção militar no Brasil".  Temas distintos, modus operandi similar.

O princípio é "se não for como eu quero, então está errado".  Isso pode ser usado em qualquer âmbito: religião, futebol e até mesmo em... software livre!

Essa discussão em software livre já vem caminhando nessa direção faz algum tempo.  E sempre com extremismo.  Os pontos são sempre "se não for livre, então é outra coisa".  A moda do momento é chamar como "OSIsta", uma alusão pejorativa de quem usa ou endossa a iniciativa do "open source".  Notem novamente o "modus operandi": é preciso ter um nome, um label, um rótulo, algo pra classificar, desmerecer, pra fazer um dualismo, uma contra-posição.

Essa tendência repete-se nitidamente na política, como se verificou nas últimas eleições presidenciais.  Ao invés de um debate democrático, partiu-se pra um enfrentamento de "nós x eles".  No caso da política, de ambos os lados, e todos recheados de mentiras e números mágicos pra comprovar alguma coisa.  O ponto era sempre irrelevante, o importante era ter uma "torcida" contra e outra a favor.

Em software livre estamos na fase das "torcidas".  É um tal de "minha distro é melhor que a sua" e de "pra resolver esse problema, instale a distro tal".  Perdemos o saber, o conhecimento, o prazer técnico.  Voltamos à idade da pedra digital.  Batalhas épicas são travadas por causa de interfaces gráficas.  Ninguém mais liga se é possível instalar essa mesma interface em outra distro ou não.  Ajudar?  Escrever software?  Não, muito obrigado.

Comunidade de software livre

O que é uma comunidade?  A wikipedia, que é uma comunidade, nos ajuda a responder do ponto de vista sociológico:

Uma comunidade é um conjunto de pessoas que se organizam sob o mesmo conjunto de normas, geralmente vivem no mesmo local, sob o mesmo governo ou compartilham do mesmo legado cultural e histórico. Os estudantes que vivem no mesmo dormitório formam uma comunidade, assim como as pessoas que vivem no mesmo bairro, aldeia ou cidade. Fichter, 1967 em suas Definições para uso didático ressalta que uma palavra que é rodeada de significados múltiplos, requer uma cuidadosa definição técnica, ao que propõe: comunidade é um grupo territorial de indivíduos com relações recíprocas, que servem de meios comuns para lograr fins comuns.

https://pt.wikipedia.org/wiki/Comunidade

São indivíduos reunidos por algo comum em buscar de reciprocidade pra chegar nos mesmos objetivos.  Isso significa que pra fazer parte de uma comunidade basta... participar!

E numa comunidade de software livre?  O que se espera de alguém que participe de software livre?  Pode parecer loucura minha, mas se espera que a pessoa faça... software!  E livre! Livre!  Que coisa doida, não é?

Claro que nem todos têm essa capacidade de escrever software.  Mas sempre podem colaborar como membros de um grupo, ou até vários.  Podem ajudar com traduções, escrevendo novos documentos de uso, compartilhando experiências em blogs, participando de grupos, fazendo eventos, palestrando, escrevendo relatórios de bugs e... eventualmente... escrevendo software!

Numa comunidade esse é o caminho do aprendizado, vai se crescendo conforme se participa e adquire mais maturidade.  Uma comunidade de software, seja livre ou não, não vive por muito tempo se ninguém se dispuser a escrever o software.  No caso de uma comunidade de software livre, temos de fazer sempre software, e livre.

E como define liberdade?  Como um software é livre?

Nisso o Richard Stallman já nos ajudou mostrando que pra um software ser livre, ele precisa atender as 4 liberdades.  Eu já tinha descrito no post "freesoftware e negócios", mas o faço novamente aqui:

  • A liberdade de executar o programa, para qualquer propósito (liberdade 0).
  • A liberdade de estudar como o programa funciona, e adaptá-lo às suas necessidades (liberdade 1). Para tanto, acesso ao código-fonte é um pré-requisito.
  • A liberdade de redistribuir cópias de modo que você possa ajudar ao próximo (liberdade 2).
  • A liberdade de distribuir cópias de suas versões modificadas a outros (liberdade 3). Desta forma, você pode dar a toda comunidade a chance de beneficiar de suas mudanças. Para tanto, acesso ao código-fonte é um pré-requisito.

 Então pra fazer parte de uma comunidade de software livre, basta criar softwares partindo desse princípio básico.  E a licença?  Sempre depende de quem criou.  Alguns gostam da GPL (sendo que GPLv2 e GPLv3 são muito diferentes), já outros preferem BSD, ou Artistic License.  Eu uso uma no estilo da Artistic License, a BWL.

Veja que software livre não é algo que dá poder ao programador ou desenvolvedor, mas ao usuário, que pode usar o software como quiser e quando quiser.  Inclusive pra vender.  O desenvolvedor permite que qualquer um possa usar e melhorar seu software.

Foi esse tipo de liberdade que me atraiu pro software livre.  Não foi pra libertar um país de nenhum ditador, nem pra subverter a economia, muito menos pra derrotar o capitalismo.  Eu gostei da visão pragmática do software livre, onde todos têm acesso ao código fonte e podem melhorar o software.  Isso pra mim foi e ainda é liberdade.

Mas aparentemente não pra galerinha que gosta de rotular.  Software livre extrapolou os limites do software pra se tornar uma luta de classes.  Como ideologias econômicas temos o capitalismo, o socialismo, e agora o softwareliberalismo.  Não, não existe, mas para alguns, aparemente é o que é.

E como se define um líder numa comunidade?  Em geral é pela meritocracia.  Meritocracia de fazer polêmica?  Não, meu caro.  Deveria ser por ter passado por todos os estágios de uma comunidade de software livre.  Mas quantos que gritam pelas ruas pela "liberdade do software" realmente se encaixam nesse perfil?

 

Ubuntu, a bola da vez

Muitos desses "lutadores da liberdade", ou melhor, "gladiadores da liberdade" escolheram o Ubuntu como alvo.  Qual o motivo?  Duas respostas simples:

1) Ubuntu lidera o mercado de desktops Linux

2) Ubuntu não é uma distribuição criada por uma comunidade, mas por uma empresa, a Canonical

Então qual é o mais fácil de atacar?  Quem tem o menor número de usuários ou o maior?  Claro que o maior.  Por isso que Ubuntu é sempre escolhido como alvo preferido.  E enquanto mantiver essa liderança, continuará sendo.  Pra isso não importa se trouxeram mais usuários pra Linux, se mantém um portal pra correções de bugs ou que façam doações de mídia de instalação gratuitas.  É corporativo, é do mal.  O que antes era ocupado pela Microsoft como visão de antagonismo, agora é a Canonical com seu Ubuntu.  É sempre preciso ter um inimigo pra lutar contra.

Os problemas citados?  Vou apenas comentar um: Ubuntu "monitora seus usuários".  A Canonical, mais uma vez como empresa, decidiu monetizar o Ubuntu utilizando as "lentes" de seu ambiente desktop pra fazer buscas na Amazon e assim conseguir algum financiamento com essas buscas.  O mesmíssimo mecanismo usado por... FIREFOX!  Sim, o browser Firefox.  Quando se faz a pesquisa na caixa de pesquisas do browser, ele envia ou pra Google ou pra Yahoo, pra monetizar o projeto e assim poder financiar seu desenvolvimento.

Mozilla taps in-Firefox ads as it searches for more revenue

Mas o Firefox, ou melhor, a Mozilla não é líder.  Nem em browsers, nem em telefones (que recém lançaram e não fez muito diferença pros usuários).  Então não vale a pena receber o ódio dos gladiadores da liberdade.  É preciso ter um significado, mostrar alguém com monstro, como contradição.  É preciso ter um diabo pra existir um deus.

Todos os outros comentários sobre Ubuntu, e que podiam ser pra qualquer outro, caem no caso de factóides.  São apenas meia-verdades contadas pra criar um fato, um caso.  Apenas pra gerar polêmica e buscar atenção.  Não vou comentar mais nenhum, mas da próxima vez que ouvir sobre algo assim, pergunte a si mesmo qual é a licença usada nesse software/produto da Canonical, se o código fonte está disponível, se é usado pela Canonical, pelo kernel (Linux), se é usado por outras distribuições profissionais como RedHat e Suse, e se qualquer usuário poderia optar por remover ou não pelo gerenciador de pacotes.  Se está entre algum desses, factóide na certa.

Devemos lutar pelo Ubuntu?

Acho que não.  Ubuntu não precisa disso ou de qualquer um de nós.  É gerido por uma empresa, e não por uma comunidade.  Como tal, toma suas decisões como melhor convier pra seu negócio.

E se em algum momento o Ubuntu ou a Canonical se sentirem lesados por essas atitudes, tenham certeza que seus advogados agirão.

Eu gosto do Ubuntu pela facilidade de entrada ao mundo de software livre que proporciona às pessoas.  Não é feito pra mim ou pra qualquer um que já use Linux, mas pra quem nunca usou ou experimentou.  Esse tipo de usuários (veja que não me refiro como comunidade, mas usuário) não tem interesse ou conhecimento sobre liberdade.  Não nesse primeiro contato, que é muito importante.

Eu sou fã irrestrito do Debian, mas simplesmente desisti de tentar esse primeiro contato através dele.  Por que?  Debian não é bom?  É bom pra mim.  É ótimo.  Mas toda vez que tentei fazer uma instalação pra amigo, pra convencer a usar, virei um tipo de suporte técnico.  Aliás personal suporte técnico.  E problemas não faltaram.  De upgrade que parou de funcionar ambiente gráfico a modem que não conectava mais na Internet.

Atualmente recomendo usar Ubuntu sem medo.  Se gostar e quiser aprender mais, ensino sobre Debian.  Se achar horroroso e difícil, já abandona ali mesmo.  Ganhei tempo ao invés de perder.

Esse é o discurso que todos deveriam adotar em software livre: inclusão.  Mas ao contrário disso decidimos por ir direto pela segregação.

Incrivelmente alguns realmente acham que esse caminho dará certo.  Eu prefiro concordar com a imagem que o Patola postou num dos grupos que discutiam esse tipo de assunto.  Deixa bem claro quem realmente ganha com a ajuda dos gladiadores da liberdade.

 

Escrito por Helio Loureiro
Categoria:

Cansado de tanta repercursão negativa e tentando ter seu kernel em acordo com as diretivas da GNU, Linus Torvalds está lançando a versão do kernel que passará a se chamar "mimimi".  Segundo o próprio:

- O que antes se chamava Linux, de agora em diante será chamado simplesmente de mimimi.  Não virá mais com nenhum blob binário ou suporte a hardware que não seja livre, ou melhor, livre de mimimi.  Aliás também não terá gereciamento de memória, já que ninguém lembra mesmo de nada e quando o assunto é "fazer software", o sujeito finge que não é com ele.  Isso atenderá as demandas de liberdade de todo mundo, que poderá chamar de sistemas GNU/mimimi.

Apesar de não ter sido claro e específico, o novo kernel parece ter sido feito sob medida pro Brasil, pois leva a tag "br".

A versão inicial é 6.6.6-br mas não se sabe se o GNU/mimimi terá mais versões ou vai ficar nesse mesmo release indefinidamente. Alguns já dizem que GNU/mimimi não precisa de mais versões, pois o mimimi é infinito.

Nota: esse é um post de 1º de abril.  E o choro, como sempre, é livre.

Escrito por Helio Loureiro
Categoria:

Não é de hoje que os releases do Debian não saem nas datas esperadas.  O Debian evita ter uma data certa, como faz o Ubuntu, por focar na qualidade: enquanto não estiver com todos os bugs corrigidos, não há o lançamento da versão.

Mas em tempos de 140 caractéres, é difícil conter a ansiedade em esperar.  Muitos já estão migrando pra nova versão que virá, a Jessie, mesmo essa estando em estágio de "desenvolvimento" ainda.

Mas você pode ajudar a resolver os problemas.  Foi lançado um mail pra informar o estado atual do desenvolvimento.  São 55 bugs ainda abertos que precisam de correção.

Status of Jessie release

Se quiser contribuir, basta ajudar a resolver esses bugs, e enviar suas correções/comentários pro time (ou pessoa) responsável.

O lançamento da próxima versão do Debian pode estar em suas mãos.

Escrito por Helio Loureiro
Categoria:

Vírus em LinuxTem sido bastante difícil pra mim manter meu site atualizado, e não estou conseguindo manter meu ritmo de ao menos 1 post por semana.  Sinal de trabalho duro em outras coisas.

Estava pra comentar sobre esse assunto espinhoso, dos vírus pra Linux, faz um certo tempo.  Ao menos desde o início do ano.  Mas... enfim consegui um momento livre pra eu poder fazer isso.

A pergunta que surge de tempos em tempos é clara: EXISTEM VÍRUS PRA LINUX?

As respostas variam.  Defensores de Windows dizem que com toda certeza existem.  Mostram receitas esotéricas sobre como isso é possível e sempre voltam com a famosa frase "nenhum sistema é infalível", ou algo parecido com isso.

Os defensores de Linux, eu me incluo nesse grupo, dizem que é impossível.  Linux não é Windows.  Não foi feito sobre a mesma plataforma furada da Microsoft, que é cheia de buracos, e até provavelmente com alguns toques da NSA pra ajudar.  Se o usuário do Linux tem algum problema, o motivo é que não sabe atualizar sua distro.

Mas isso não explica a quantidade de problemas que têm aparecido sobre malwares em plataformas Linux, inclusive Android.

 

O problema é o windows.  Não que o windows tenha criado uma geração de vírus, mas o windows cunhou fortemente o conceito errado de que tudo é vírus.  Todo problema, malware, tudo é vírus.  E também foi graças ao windows que o conceito "se não funcionar, reinstala, se está lento, reinstala, e se quer mudar o wm, reinstala" se fortaleceu.  Isso se faz bem claro nos usuários que, pra trocar o Unity no Ubuntu, reinstalam o sistema inteiro.  Em geral com alguma refisefuqui.

Vírus é um pedaço de código que altera binários ou arquivos, e que se executa cada vez que esse programa é chamado ou aberto, no caso de arquivos.

Claramente isso não é possível no Linux por um simples motivo: quem executa o programa é o usuário e quem é o "dono" do binário é em geral o root.

Mas os problemas existem.  E muitos.  Existem os usuários que teimam em trabalhar como root no sistema, pra "facilitar as coisas".  Em geral os mesmos que reinstalam os sistema inteiro pra apenas trocar o wm (window manager).  Existem também os "programas de terceiros", como o plugin flashplayer, que não recebem as devidas atualizações de segurança.  Felizmente esses "programas de terceiros" não causam danos ao sistema como um todo, mas infelizmente podem fazer estrago o suficiente com o usuário, como permitir que suas credenciais de banco sejam roubadas.  Basta ver os recentes problemas do Java da Oracle.  Recentes?  Melhor dizer "contínuos".

E dá pra viver sem esses "aplicativos de terceiros"?  Até dá, mas não é muito fácil.  Alternativas existem, como pepperflashplugin ao invés do flash da Adobe, não usar acrobat reader ou seu plugin, mas os modos nativos do Firefox e do Chrome/Chromium pra renderizar pdf, etc.  O problema não são os "aplicativos de terceiros", mas se esses terceiros tratam os usuários de Linux com respeito, atualizando a cada falha encontrada.  Um bom exemplo dessa prática é o "steam", de jogos.

O problema então é o usuário, sempre?

Não.  Novamente o problema vem do windows.  Ou melhor, da idéia de vírus que veio com o uso do windows.  Quando discutimos o conceito de vírus, sempre nos vem a imagem de um desktop.  Daí os argumentos de problemas de segurança no Linux são apenas falta de atualização.  Isso não é verdade.

O outro lado do problema apareceu bem recentemente durante os ataques de DDoS do grupo LizzardSquad contra as redes de jogos PSN e Xbox Live.

Lizard Squad used hacked routers to take down Xbox Live and PlayStation Network

Foram usados roteadores caseiros, desses que usamos pra ter acesso wi-fi as nossas redes dentro de casa.  O artigo não diz, mas acredito que câmeras IPs também foram usadas.  

Esse tipo de problema não é novidade.  Foi discutido durante um dos YSTS, acho que o de 2013 que participei.  fabricantes, em geral na China, criam seus produtos pra rodar Linux, mas não dão nenhuma manutenção.  São sistemas customizados a ponto de ser impossível de rodar uma alternativa como dd-wrt/open-wrt. Esses sistemas rodam kernels Linux muito, mas muito velhos.  Daí que as explorações de vulnerabilidades, não vírus, ficam fáceis.  Nesse ponto temos de dar o braço a torcer pros usuários de windows.  Defender Linux nessas condições é quase como apontar o dedo pras máquinas windows comprometidas que rodam a versão XP.  O agravante é que o usuário se torna refém do fabricante, pois diferente dos computadores, esses sistemas embutidos não permitem que qualquer um atualize como quer, quando quiser, com a distro que mais gostar.

Então da próxima vez que ler sobre "vírus pra Linux", antes de cair na gargalhada, pense nesses roteadores e câmeras IPs.  Pense se esses sistemas rodando um Linux 2.4.20 não pode ter sua segurança facilmente comprometida.  Depois lembre que Windows, até hoje, pode ser comprometido acessando uma página web.  Foi corrigido?  Espere algumas semanas que sempre aparece de novo.

Ah... o windows...

Escrito por Helio Loureiro
Categoria:

Em geral as análises do ano que se vai acontece na semana logo após o Natal, lá pelo dia 27 ou 28 de dezembro.  Mas como minha árvore de Natal continua imponente na sala, mostrando que o Natal só termina quando acaba, o que deve ocorrer lá pra março pelos meus cálculos, acho que ainda estou em tempo de publicar como foi o ano do site durante 2014.

Como todo ano, tive uns altos e baixos no tráfego.  Não foi um outage, mas eu que mudei o template do site e esqueci de carregar e ativar o módulo de estatísticas, que faço com o j4age que já publiquei sobre no post j4age, a evolução do joomlastats.  Mas é possível ver que a média de acessos é por volta de 100 views/dia, o que está bom demais pra um site que não recorre à publicidade paga pra aparecer mais.

Sistemas operacionais

Windows continua firme e forte na primeira posição, mesmo eu não escrevendo absolutamente nada sobre ele.  Mas apesar disso, acredito que são pessoas conscientes de seus erros e que pensam em mudar logo.  Assim espero.

Surpresa foi o MacOSX figurar na segunda posição.  Esse é um novo fenômeno.

E Linux surgindo na contagem com 10% dos acessos, mais o Ubuntu, com 7,5%.  Com isso já são quase 20% dos acessos a partir de Linux, ou melhor GNU/Linux, pois existem mais os acessos a partir de Android, que são Linux mas não são GNU.

E Nokia.  Com mais acesso que FreeBSDs.  Nokia.  Essa foi uma supresa.

Navegadores

Agora a estatística de acesso de navegadores ficou melhor, colocando todos os Firefox em uma só categoria.  A tendência que já tinha visto em 2013, do Chrome despontando, se mostra clara.  Internet Explorer despencou pra 3º posição, que ainda acho muito.

Páginas mais acessadas

Sem muitas surpresas.  Uma vez que muitos links direcionam pro site, os mais acessados são sempre links da página principal.  Dá pra ver que existe uma certa procura por assuntos técnicos, principalmente python, e algum interesse por assuntos com mais opinião que informação.  E o bom e velho #XGH.

Uma coisa que ainda domina bastante os tráfegos é informação sobre hardware antigo, mais precisamente o post que fiz sobre o uso de FreeBSD num compaq que eu tinha.  Artigo de 2006 ou 2007.  E continua tendo acessos.

Referências de links

Notadamente o tráfego pro meu site vem de pesquisas diretas do Google.  Então o que seria de mim sem o Google?  Não posso reclamar.

Planos pra 2015

Esse é o ano que já começo numa vida nova, morando fora do Brasil. Tenho tido muito mais contato com a área de desenvolvimento e Linux que qualquer outro momento de minha vida.  E espero ter tempo pra escrever por aqui.  Mas... ao mesmo tempo que tecnicamente estou mais próximo do que gosto, também tenho mais desafios.  Tenho cuidado de palestras internas e desenvolvimento de Linux como desktop na empresa.  Infelizmente coisa que não tem como eu divulgar muito já que é inerente ao trabalho, mas que posso o conhecimento usar pra escrever por aqui.

E agora estou me aventurando bastante com raspberrypi.  Logo devo incluir alguns scripts e dicas de uso do mesmo.  Esse deve ser o ano de 2015, que pelas estatísticas de acesso não deve ser ainda o ano do Linux.  Ainda.

Escrito por Helio Loureiro
Categoria:

A Priscila (@MayogaX) foi uma das pessoas que reclamou que eu tinha uma seção aqui sobre bancos de dados, mas nada escrito.  Acho que finalmente chegou o momento de ter alguma coisa ;-)

Mantenho o maravilhoso e ultra moderno encurtador eri.cx, que agora passou a sofrer ataques constantes.  Chato?  É, mas ataque na Internet já virou lugar comum.  Então temos de estar preparados.  Sempre.  O foco só mudou, pois antes esse tipo de ataque vinha por mail, com os SPAMs.

Entre os muitos scripts que tenho, tem um que verifica por alguns padrões de palavras como "cialis", "tramadol", "xanax" e "taladafil".  Não tenho idéia do que sejam.  Aliás o "xanax" dá uma certa idéia.

O que me faz pensar que esses links não são legítimos?  Perfil de tráfego.  São links que o número de cliques aumenta muito rápido.  Com isso eu tenho uns scripts que fazem algumas verificações, inclusive com palavras chaves como essas.  Se o link entra nesse perfil, eu removo pra uma tabela chamada "quarantine", salvando exatamente o formato de entrada.  Em seguida eu troco pro meu próprio site.  É uma propaganda subversiva, mas é mais legítimo que permitir que as pessoas caiam nesse truques.

Hoje eu resolvi dar uma olhada nos ataques, aliás nos logs dos ataques, e procurar um perfil.  Então eu precisava pegar os IPs e procurar um padrão.  Basicamente pegar via SQL os IPs, e fazer um count() na quantidade de vezes que apareciam e apenas mostrar aqueles que um padrão acima do normal.

O resultado foi esse aqui:

mysql> select ip, count(ip) as ip_count from quarantine group by ip having count(ip) > 10 order by count(ip) desc;
+---------------+----------+
| ip            | ip_count |
+---------------+----------+
| 173.44.37.250 |      168 |
| 96.47.224.50  |      139 |
| 173.44.37.226 |      136 |
| 173.44.37.242 |      121 |
| 96.47.224.42  |      118 |
| 96.47.225.82  |      117 |
| 173.44.37.234 |      115 |
| 96.47.225.74  |      112 |
| 96.47.225.66  |      110 |
| 96.47.224.58  |      100 |
| 213.5.66.88   |       89 |
| 96.47.225.162 |       71 |
| 96.47.225.170 |       69 |
| 96.47.225.186 |       69 |
| 96.47.225.178 |       67 |
+---------------+----------+
15 rows in set (0.01 sec)

Com isso foi fácil ver um padrão claro de ataque de apenas alguns ranges IPs.  Bastou uma pequena adição ao iptables pra acabar com a farra.