Criando e executando contêineres Docker ARM em arquitetura AMD64

Cada vez é mais comum encontrar ambientes com a arquitetura ARM, seja um Raspberry Pi ou servidores na nuvem buscando reduzir custos, ou até mesmo no Apple M1. Ela difere da arquitetura mais comumente encontrada nos computadores (AMD64 também conhecido por x86_64). Essa diferença gera dificuldades para criar e executar contêineres de um ambiente em outro, dado que essas arquiteturas não possuem nativamente um modo de compatibilidade. Esse texto discutirá como executar programas para a arquitetura ARM em computadores AMD64, e como isso pode ser utilizado para gerar e executar imagens Docker.

Continue lendo...

Exemplo de AWS API Gateway com Lambda pelo Terraform

Estou estudando sobre a AWS e algumas ferramentas. Para praticar o aprendido resolvi montar de exemplo uma API Rest utilizando o API Gateway rodando o código em lambdas, e para criar o ambiente optei pelo Terraform conectando no LocalStack (já que esse pode rodar localmente e não exige uma conta na AWS). Nesse texto descreverei o processo e quais tecnologias utilizei.

Continue lendo...

Isolamento de aplicações: Docker

Série Isolamento de aplicações

Nos textos anteriores dessa série vimos como isolar uma aplicação nos contextos de sistema de arquivos, tabela de processos e pilha de rede. Porém isso pode se tornar um pouco complexo para ser gerenciado na mão, precisando executar algo como ip netns exec app1 unshare -fp --mount-proc chroot /media/sistema bash apenas para rodar um terminal dentro de determinados espaços de nomes, sem contar toda a configuração necessária para isso. Mas existem ferramentas que facilitam criar e executar aplicações dentre de espaço de nomes, o que hoje são conhecidas como contêineres.

Continue lendo...

Isolamento de aplicações: Pilha de rede

Série Isolamento de aplicações

Uma das formas de comunicação mais comum entre processos é através da rede, o que permite tanto a comunicação de processos no mesmo computador, quanto em diferentes computadores. A comunicação pela rede normalmente utiliza portas TCP ou UDP, porém algumas aplicações podem querer utilizar a mesma porta de rede, como a porta 80 TCP que é a porta padrão para serviços HTTP, ou 443 TCP para HTTPS, o que geraria conflitos.

Continue lendo...

Isolamento de aplicações: Tabela de processos

Série Isolamento de aplicações

Todo serviço é um processo que está em execução no sistema operacional, e é possível extrair informações de um processo, ou até mesmo interagir com ele através de sinais, como o enviado para que um serviço releia suas configurações, sem precisar parar e iniciá-lo novamente para aplicar as alterações, ou para pedir que ele finalize (pare de executar). Um processo poderia se aproveitar desses mecanismos para obter informações, ou causar uma indisponibilidade.

Continue lendo...

Isolamento de aplicações: Sistema de arquivos

Série Isolamento de aplicações

Aplicações são desenvolvidas e muitas vezes executadas como serviços em servidores, os quais podem rodar uma única aplicação, ou compartilhar seus recursos de hardware entre diversas aplicações. Entretanto podem existir conflitos entre as aplicações, como requisitarem a mesma porta de rede, exigirem versões diferentes de biblioteca e afins, além de questões de segurança. Nesse primeiro texto será abordado como isolar o sistema de arquivos entre os processos dessas aplicações, de forma que um processo não consiga visualizar os arquivos referentes a outra aplicação.

Continue lendo...

Liberar acesso ao servidor SSH pelas chaves do GitHub

Uma das formas mais utilizadas para acessar servidores GNU/Linux é através do SSH. Esse acesso pode ocorrer através de usuário e senha ou de um par de chaves criptográfica, normalmente RSA ou mais recente Ed25519, que são chaves assimétricas, onde a chave pública é copiada para o servidor e a privada fica no cliente que está pedindo acesso. Esse processo é o mesmo que ocorre no GitHub para permitir o acesso aos repositórios através de SSH, e é possível se aproveitar disso.

Continue lendo...

Álgebra booliana

Há algum tempo, quando a bug_elseif ainda estava fazendo listas de exercícios em Python, apareceu um problema que envolvia verificar se um ano era bissexto ou não. Embora a construção de uma expressão para verificar se um ano é bissexto seja até intuitiva, como estávamos utilizando a condição invertida (verificar se o ano não era bissexto), sua construção não estava sendo fácil, porém é possível usar um pouco de matemática para chegar nela.

Continue lendo...

Orientação a objetos de outra forma: Property

Série Orientação a objetos de outra forma

Seguindo com a série, chegou a hora de discutir sobre encapsulamento, ou seja, ocultar detalhes de implementação de uma classe do resto do código. Em algumas linguagens de programação isso é feito utilizando protected ou private, e às vezes o acesso aos atributos é feito através de funções getters e setters. Nesse texto vamos ver como o Python lida com essas questões.

Continue lendo...

Orientação a objetos de outra forma: ABC

Série Orientação a objetos de outra forma

Na discussão sobre herança e mixins foram criadas várias classes, como Autenticavel e AutenticavelComRegistro que adicionam funcionalidades a outras classes e implementavam tudo o que precisavam para seu funcionamento. Entretanto podem existir casos em que não seja possível implementar todas as funções na própria classe, deixando com que as classes que a estende implemente essas funções. Uma forma de fazer isso é través das ABC (abstract base classes, ou classes base abstratas).

Continue lendo...
Listar artigos por: Séries, Tags, Linguagens de Programação