O Projeto Software Livre Bahia (PSL-BA) é um movimento aberto que busca, através da força cooperativa, disseminar na esfera estadual os ideais de liberdade difundidos pela Fundação Software Livre (FSF), possibilitando assim a democratização do acesso a informação, através dos recursos oferecidos pelo Software Livre. Esta busca tem seus alicerces fundados na colaboração de todos, formando um movimento sinérgico que converge na efetivação dos ideais de Liberdade, Igualdade, Cooperação e Fraternidade.
O Projeto Software Live Bahia é formado pela articulação de indivíduos que atuam em instituições publicas e privadas, empresas, governos ou ONGs, e demais setores da sociedade. Além disso o projeto não é subordinado a qualquer entidade ou grupo social, e não estabelece nenhuma hierarquia formal na sua estrutura interna.
Aprenda a criar repositórios de pacotes Debian
29 de Junho de 2015, 3:00 - sem comentários aindaNeste post irei mostrar como configurar um repositório de pacotes Debian GNU/Linux usando dput + mini-dinstall + nginx. O Debian é um sistema operacional livre criado e mantido por um grupo independente de desenvolvedores espalhados pelo mundo, o projeto foi iniciado em 1993 e tem sido desenvolvido abertamente desde então sempre seguindo o espírito do projeto GNU.
Uma das características mais interessantes do Debian é o seu sistema de gerenciamento de pacotes.
“Um sistema de gerenciamento de pacotes é uma coleção de ferramentas que oferece um método automático para instalar, atualizar, configurar e remover pacotes de um sistema operacional. É tipicamente usado em sistemas operacionais tipo Unix, que consistem de centenas de pacotes distintos, para facilitar a identificação, instalação e atualização” (fonte: Wikipédia)
O sistema de gerenciamento de pacotes Debian chamado APT foi criado originalmente pelos desenvolvedores do projeto e lançado pela primeira vez em 9 Março de 1999 no Debian 2.1 (Slink) e conta hoje com um total de 44893 pacotes (44 mil !!!) em seus repositórios oficiais. Esta enorme quantidade de softwares disponíveis nos repositórios oficiais do projeto torna extremamente simple pesquisar, instalar, atualizar ou remover qualquer coisa do computador.
Os pacotes disponibilizados nos repositórios oficiais do Debian passam por um rígido controle de qualidade liderado pelos desenvolvedores oficiais do projeto e aberto à contribuição de qualquer pessoa. Então se você está empacotando algo veja o Guia do Novo Mantenedor Debian para saber como incluir isso nos repositórios oficiais.
Mas se isso não for possível ou se você não puder esperar o pacote entrar no Debian seja por qual motivo for, então a solução será criar um repositório pessoal ou Private Package Archive (PPA). É isto que será descrito aqui a partir de uma solução proposta inicialmente por Stefano Zacchiroli em seu blog no post howto: uploading to people.d.o using dput.
Configurando o servidor para receber pacotes
- Sistema Operacional: Debian Wheezy
- Domínio: debian.joenio.me
Acesse o servidor via SSH
e instale o mini-dinstall
:
mini-dinstall is a tool for installing Debian packages into a personal APT repository
# apt-get install mini-dinstall
Crie o diretório onde os pacotes serão copiados:
$ mkdir -p ~/debian.joenio.me/mini-dinstall/incoming
Crie o arquivo ~/.mini-dinstall.conf
:
[DEFAULT]
mail_on_success = false
incoming_permissions = 0750
architectures = all, i386, amd64
archive_style = flat
dynamic_reindex = 1
archivedir = /home/joenio/debian.joenio.me/
generate_release = 1
release_label = Joenio
release_description = Unofficial Debian packages maintained by Joenio Costa
verify_sigs = 0
Preparando a estação de trabalho para enviar pacotes
- Sistema Operacional: Debian Testing
Instale o dput
em seu computador:
dput allows you to put one or more Debian packages into the archive
# apt-get install dput
Exporte sua chave pública GnuPG
para para o arquivo signing.asc
.
$ gpg --armor --output signing.asc --export D5609CBE
Copie o arquivo signing.asc
para o servidor:
$ scp signing.asc debian.joenio.me:~/debian.joenio.me/
Crie arquivo ~/.dput.cf
em seu $HOME
:
[debian.joenio.me]
fqdn = debian.joenio.me
method = scp
login = *
incoming = ~/debian.joenio.me/mini-dinstall/incoming
allow_unsigned_uploads = 0
post_upload_command = ssh debian.joenio.me mini-dinstall -b && sign-remote --no-batch debian.joenio.me:debian.joenio.me/unstable/Release
Os pacotes serão assinados com a chave GnuPG
ao serem enviados pelo dput
ao
servidor. Isso será feito pelo script sign-remote
disponível
aqui. Copie este arquivo em seu computador e adicione a
localização dele ao $PATH
, se não sabe do que estou falando leia
isso.
O dput
irá reclamar se a distribuição do pacote não for unstable, isto é
definido no arquivo changelog
do pacote, veja o capítulo 4 Required files
under the debian directory no Guia do Novo Mantenedor Debian
para entender como fazer isso.
Bem, aqui já temos tudo pronto para fazer upload dos nossos pacotes ao servidor, basta executar o seguinte comando:
$ dput debian.joenio.me <pacote>.changes
Isto irá copiar o pacote .deb e o arquivo .changes dele, irá atualizar os
arquivos Sources e Packages com as informações do pacote e irá assinar o
arquivo Release com a chave pública GnuPG
.
Disponibilizando acesso ao repositório publicamente
Até aqui já temos um repositório com pacotes hospedados, mas sem acesso público
aos pacotes ninguém poderá utilizá-lo. Para resolver isto vamos configurar
acesso via HTTP
usando o servidor web Nginx.
Instale o Nginx
no servidor:
# apt-get install nginx
Crie o arquivo de configuração /etc/nginx/sites-available/debian.joenio.me
:
server {
server_name debian.joenio.me;
access_log /var/log/nginx/debian.joenio.me.access.log;
location / {
root /home/joenio/debian.joenio.me;
autoindex on;
}
}
Habilite o arquivo de configuração e reinicie o serviço:
# cd /etc/nginx/sites-enabled/
# ln -s /etc/nginx/sites-available/debian.joenio.me
# service nginx restart
Com o Nginx
configurado e rodando já temos o repositório e seus pacotes
disponíveis no seguinte endereço:
Testando o repositório e instalando pacotes
Para usar este repositorio adicione as seguintes entradas no
/etc/apt/sources.list
do computador local:
deb http://debian.joenio.me unstable/
deb-src http://debian.joenio.me unstable/
Adicione a chave de assinatura ao banco de dados de segurança do APT
:
# wget -O - http://debian.joenio.me/signing.asc | apt-key add -
Atualize a lista de pacotes e teste a instalação de algum pacote disponível no repositório:
# apt-get update
# apt-get install <pacote>
Pronto, temos o nosso próprio repositório de pacotes Debian disponível publicamente. Você pode agora publicar qualquer pacote que esteja criando e divulgar o endereço do repositório para que outros usuários Debian possam instalar os seus pacotes mais facilmente.
Na wiki do Debian em How to setup a Debian repository tem uma lista de ferramentas para configuração de repositórios Debian, não usei a maioria das ferramentas listadas lá, mas dentre elas o aptly parece uma boa opção para criar repositório pessoal de pacotes Debian e pode ser uma boa alternativa para o setup descrito aqui neste post.
Computação Brasil #27: Software Livre
24 de Junho de 2015, 17:29 - sem comentários aindaA Computação Brasil é revista publicada pela Sociedade Brasileira de Computação (SBC), e publica edições temáticas cobrindo assuntos importantes na Computação. A ultima edição, de número 27, é dedicada ao Software Livre.
Citando o editorial, escrito pelo professor Paulo Roberto Freire Cunha, presidente da SBC:
Software Livre é hoje um assunto importantíssimo para toda a sociedade, ultrapassando a questão ideológica e tornando-se um ecossistema complexo e de interesse global, que inclui pesquisa científica, educação, tecnologia, segurança, licença de uso e políticas públicas.
Um ponto fundamental é o impacto que ele gera no mercado, atuando hoje como um facilitador para milhares de startups em todo o mundo. Por isso, tem um papel essencial num país como o Brasil, onde o sucesso do empreendedorismo e da inovação tecnológica está diretamente ligado à redução de custos, à criatividade e à flexibilidade.
Para destacar o assunto, a revista traz diversos especialistas que mostrarão as mais recentes análises e pesquisas sobre Software Livre, com o propósito de estimular o leitor a fazer uma reflexão sobre o futuro do desenvolvimento de plataformas com código aberto e suas aplicações em diferentes frentes.
Eu e o Paulo escrevemos juntos 2 textos para esta edição. O primeiro, com co-autoria da professora Christina Chavez, que foi minha orientadora de doutorado, é sobre Controle de Qualidade em projetos de software livre. O segundo, em autoria com o Rodrigo Maia, é sobre a reformulação do Software Público Brasileiro, projeto no qual trabalhamos juntos desde a metade e 2014.
A versão online da revista é meio tosca, se como eu você não tiver Flash instalado (não tenho idéia de como seja a versão com Flash). Mas a versão em PDF é bem razoável.
Será que esse modelo de containers é um Hype?
12 de Junho de 2015, 1:34 - sem comentários aindaNa informática tudo as vezes parece muito fluído. Coisas nascem rapidamente e morrem as vezes na mesma velocidade. Algumas tecnologias que prometem muito e as vezes se percebe que grande parte é uma grande obra de marketing ou algo parecido.
Quando a ideia de trabalhar com containers me foi apresentada, através do uso do Docker, e como as pessoas já estavam eufóricas fora do Brasil sobre esse assunto, me deixou um pouco com a antena ligada, que talvez fosse esse mais hype da nossa área. Sendo assim fui pesquisar com certo receio.
Ao testar pela primeira vez seu uso, percebi que tinha grande potencial, que tecnicamente a ideia é muito boa e toda cadeia de serviço que vem embutido no modelo faz muito sentido para a nova cultura DevOps que vem se desenhando há certo tempo.
Talvez você não confie nas minhas previsões, pois sou somente um soteropolitano comedor de acarajé Talvez as notícias abaixo deixem você mais convencido:
Containers and Microservices Force VMware To Ship A Linux Distribution
Veja que estamos falando da grande VMWare, que é dona de uma enorme fatia de mercado.
Intel takes on CoreOS with its own container-based Linux
A Intel não me parece ser uma empresa que aposta em hypes E criar sua própria distribuição GNU/Linux para atender essa demanda de mercado quer dizer muita coisa pra mim.
Google gets a jump on Microsoft and Amazon with Container Engine
Nem preciso falar do tamanho da Google, não é? Sei que ela acaba testando muita coisa, e uma parte acaba por ser Hype mesmo (Google Glass?), mas ela usar como serviço indica bastante coisa pra mim.
Microsoft Unveils New Container Technologies for the Next Generation Cloud
Assim como a Google, a Microsoft está apostando nesse modelo para seu serviço e vale lembrar que de todas essas empresas, a MS é a empresa mais conservadora, ou seja, se até mesmo a MS está apostando nisso, quem pode duvidar desse sucesso?
Zyne is now in Debian
9 de Junho de 2015, 16:05 - sem comentários aindaZyne is a modular synthetizer written in Python. Anyone can create and extend its modules using the Pyo library. Zyne's GUI is coded using WXPython and will look nicely in GNU/Linux, Mac and Windows systems. It's written by the same author of Pyo, and together with Cecilia and Soundgrain is part of an amazing set of libre tools for sound synthesis and electronic music composition.
Zyne loading 6 of its 14 default modules
Zyne package is result of a successful one-day event called MicroDebconf Brasilia 2015, being created during a track about packaging and QA leaded by Eriberto Mota and Antonio Terceiro.
Troubleshooting Docker
8 de Junho de 2015, 1:36 - sem comentários aindaO Docker é uma solução muito recente e talvez por isso que tenha tão pouca documentação sobre coisas não triviais. Com base nisso, farei um pequeno resumo dos passos que pode seguir para analisar seu ambiente para encontrar a causa raiz em caso do problema.
Parâmetro PS
Como o básico, temos o comando “docker ps” ele nos mostra o estado dos containers. Ele por padrão (sem parâmetros) mostra quais estão em execução, mas com os parâmetro -a ele mostra todos os containers, incluindo os que não estão em execução:
Os containers que tiverem a informação “Exited” na coluna “STATUS” não estão mais em execução e o número que aparece entre parentes é o código de saída do processo, ou seja, qualquer coisa diferente de “0” indica um problema.
Log
Você pode analisar o log também. O Docker por padrão envia logs via syslog, ou seja, acesse o arquivo de log geral do seu GNU/Linux, que no caso do Debian é o “/var/log/syslog”:
# tail -f /var/log/syslog | grep -i “docker”
Logs
Diferente de apenas analisar o log do host docker, você pode ver o resultado do comando executando no container. Isso pode ser muito útil para entender a saída de erro, que normalmente não aparece no log do syslog:
# docker logs <container ID>
No meu caso abaixo, ficou fácil:
Stats
Caso você suspeite de uso irresponsável dos recursos, pode usar o parâmetro “stats” do docker. Com o comando abaixo listará todos os containers e seus respectivos usos do recurso do host:
docker ps -q | xargs docker stats
Sysdig
Não conhece Sysdig? Veja esse vídeo.
Caso esteja usando Debian, será necessário instalar o pacote mais novo. Você pode fazer tudo com o comando abaixo:
# wget http://ftp.us.debian.org/debian/pool/main/s/sysdig/sysdig_0.1.99-1_amd64.deb ; wget http://ftp.us.debian.org/debian/pool/main/s/sysdig/sysdig-dkms_0.1.99-1_all.deb ; dpkg -i sysdig*
Depois será necessário reiniciar o módulo do sysdig:
# rmmod sysdig-probe; modprobe sysdig-probe
Processamento
Para analisar o alto consumo de processador é simples. Use o comando abaixo:
# sudo sysdig -pc -c topprocs_cpu
O parâmetro “-pc” adiciona o contexto de containers, ou seja, é o mesmo comando padrão de processamento do sysdig, porém com o adendo sobre containers.
Veja o retorno desse comando:
Eu executei um grep recursivo no container “trusting_mayer” apenas para efeito de teste. E veja nosso container como o processo que mais consome processador.
Rede
É possível saber quem são os maiores utilizadores de recurso de redes com o comando abaixo:
# sysdig -pc -c topprocs_net
Veja o retorno:
Resumindo. Uso de rede não é o problema aqui, certo?
Caso tenha interesse em saber quais as conexões abertas nesse momento, use o comando abaixo:
# sysdig -pc -c topconns
Veja o retorno:
Interessado em ir um pouco mais fundo nessa analise? Que tal ver os dados que trafegam nessas conexões?
# sysdig -A -cecho_fds container.name=tender_elion and fd.port=80
No lugar de “tender_elion” coloque o nome do seu container e o mesmo para a porta.
Veja o retorno:
Como podemos ver, é apenas o apt-get instalando pacotes.
Disco
E se o problema for algo relacionado a uso do disco?
Com o comando abaixo é possível ter uma pista:
# sysdig -pc -c topprocs_file
Veja o retorno:
Podemos ver que tem alguém ali consumindo bastante disco.
E se eu quiser mais informação sobre quais são os arquivos maiores e afins?
# sysdig -pc -c topfiles_bytes
Veja o retorno:
Agora temos mais informações.
Segurança
Suspeitou de algum problema de segurança? Analise todos os comandos executados, tanto no host, como no container com o comando abaixo:
# sysdig -pc -c spy_users
Veja o retorno:
Mais logs
Quer analisar todos os logs em apenas um tela? Simples assim:
# sysdig -pc -cspy_logs
Veja o retorno:
Muito dado, certo? Quer ver os logs de um container em específico?
# sysdig -pc -cspy_logs container.name=condescending_einstein
Lembre-se de mudar o nome do container.
Veja o retorno:
Com todo esses dados, acho que agora sua analise da causa raiz do problema fique mais fácil.
Referência
https://sysdig.com/let-light-sysdig-adds-container-visibility/
http://www.sysdig.org/wiki/
Docker – Compose (Vídeo)
2 de Junho de 2015, 1:25 - sem comentários aindaSeguindo a série de vídeos sobre Docker, com esse vídeo você verá o que é Docker Compose e como usá-lo.
Corretor ortográfico para VIM
1 de Junho de 2015, 12:52 - sem comentários aindaVocê usa VIM para criação de textos (LaTeX ou afins)? Sempre sentiu falta de um corretor ortográfico? Seus problemas se acabaram!!!
Preparando ambiente:
# cd ~ ; mkdir corretor ; cd corretor
Baixando a base de palavras:
# wget http://extensions.libreoffice.org/extension-center/vero-verificador-ortografico-e-hifenizador-em-portugues-do-brasil/pscreleasefolder.2012-01-04.1563120832/2.1.2/vero_pt_br_v212aoc.oxt
# unzip -x vero_pt_br_v212aoc.oxt
Aplicando no vim
Acesse o vim com o comando abaixo:
# vim
No vim digite:
:mkspell pt pt_BR
Obs: Pode demorar um pouco e dará alguns erros de arquivos duplicados, ok?
# cp pt.utf-8.spl /usr/share/vim/vim*/spell/
Usando o corretor no vim
Dentro do vim execute o seguinte comando:
set spell spelllang=pt,en
Caso queira que o corretor seja habilitado automaticamente sempre que acessar o vim:
# echo ‘set spell spelllang=pt,en’ >> ~/.vimrc
Pronto
Segurança no Docker
1 de Junho de 2015, 2:40 - sem comentários aindaQuando pensamos sobre segurança no Docker, é importante relembrar que a exploração de uma falha nesse ambiente podem ter efeitos catastróficos. Ainda mais quando é algo automatizado.
A ideia é ter certeza que o ambiente e o processo executado é o mais seguro possível.
Vou apresentar algumas configurações iniciais que podem ser analisadas para tornar seu ambiente ainda mais seguro.
Restrição de acesso
No que tange a isolamento, o Docker tem muito a acrescentar e esse ponto não se limita ao fato das aplicações estarem separadas a nível de disco e processo. Podemos sair da dicotomia “root e não root”, pois entre um usuário sem permissão e o usuário root existe todo um gradiente de permissões que podem, e devem, ser analisadas e removidas caso não seja necessária.
Desde o kernel 2.2, as permissões foram divididas e chamadas de “capabilities”, que no docker podem ser “ligadas” ou “desligadas” por container. Isso permite que o ambiente tenha “a menor permissão necessária”, que é quase um mantra na área de segurança.
Para conhecer a lista de capabilities, segue o seguinte link.
No Docker, caso você não especifique nada sobre adicionar ou remover capabilities, a lista abaixo será aplicada no container:
- CHOWN
- DAC_OVERRIDE
- FSETID
- FOWNER
- MKNOD
- NET_RAW
- SETGID
- SETUID
- SETFCAP
- SETPCAP
- NET_BIND_SERVICE
- SYS_CHROOT
- KILL
- AUDIT_WRITE
Caso deseje remover permissão MKNOD, por exemplo, use o seguinte comando:
# docker run –cap-drop=MKNOD …
Caso deseja adicionar, LEASE por exemplo, use o seguinte comando:
# docker run –cap-add=LEASE …
Restrição de sistema de arquivo
Quando um container é instanciado é criado um novo ponto de montagem com arquivo da imagem usada para esse novo ambiente.
Esse espaço de disco da imagem é montado como somente leitura e assim uma camada superior é criada para receber as modificações que ocorrerem desde então. Caso queira aplicar essas modificações na imagem, pode usar o parâmetro “commit” para tal ação.
As modificações podem ser armazenadas em tags diferentes e assim se tornaria mais fácil fazer “rollback” das modificações, caso seja necessário. Pra usar tag é muito simples:
# docker tag <número ou nome da tag> <nome da imagem>
Multi Level Security
Com o Docker é possível manipular configurações do “MCS labels” para evitar que um container acesse indevidamente dados de outro container, por uma questão de má configuração ou exploração de alguma vulnerabilidade. Podemos aplicar um label a um processo baseado no nível de informação que você deseja que ele tenha acesso.
docker run -d –security-opt label:level:TopSecret httpd
Quer aprender um pouco mais sobre MLS? Leia aqui.
Outras medidas de segurança “fora” do Docker
As versões modernas do Kernel Linux podem ser complementadas com variadas ferramentas de segurança adicionais, tal como TOMOYO, AppArmor, SELinux e GRSEC, que podem funcionar perfeitamente com Docker, algumas inclusive já tem templates de configuração específicos para containers.
Você pode definir políticas customizadas de segurança com essas ferramentas. Basta ler seus respectivos manuais.
Referências:
https://d3oypxn00j2a10.cloudfront.net/assets/img/Docker%20Security/WP_Intro_to_container_security_03.20.2015.pdf
https://docs.docker.com/reference/run/#runtime-privilege-linux-capabilities-and-lxc-configuration
https://github.com/docker/docker/blob/master/daemon/execdriver/native/template/default_template.go
http://docs.docker.com/articles/security/