Computadores e a Internet não são mágicos… e nem é tão difícil assim de explicar

Venho trabalhando com tecnologia e desenvolvimento de software a pelo menos 20 anos; mais recentemente na área de infraestrutura e operações. Ao longo dos anos, como muitos colegas da área, encontrei pessoas que, considerando eu como sendo o “nerd da turma”, questionam: Como é que funciona? Quando dizemos “fazer download“, “compartilhar no WhatsApp” ou “publicar no Instagram“, o que realmente acontece lá dentro do computador?

Muito dessa curiosidade nasce quando a pessoa percebe que, apesar de tantas comodidades, não entende bulhufas de como os aparelhos mais modernos funcionam.

Para a pessoa comum, o computador é literalmente uma caixa mágica com botões e uma tela colorida. É uma máquina surpreendente com a qual podemos jogar, compartilhar momentos, comprar coisas, conversar com amigos, encontrar pessoas… Mas assim que um “especialista” tenta explicar como ela funciona por baixo dos panos, a conversa desanda muito rápido. Tentativas variam desde explicações sobre o sistema binário até as mais elaboradas analogias, como tubos e encamento. A maioria logo descamba sobre rebinbocas e parafusetas que, para um leigo, não tem pé nem cabeça.

Certamente, é um dos motivos de, hoje em dia, tantos filmes mostrarem pessoas destruindo o computador quebrando a tela do monitor.

A analogia que prefiro utilizar é relativamente simples. Tenta explicar como computadores e a Internet funcionam de tal forma que uma pessoa leiga possa entender, ao mesmo tempo que tenta manter os conceitos fundamentais do que acontece dentro da máquina. Não chega nem perto de falar sobre operações matemáticas, memória principal, dispositivos de armazenamento ou interfaces de rede. Esqueça tudo isso. Mantenha o foco no propósito das coisas.

Quando você compra um computador, na verdade está comprando um baralho

Quando você vai até uma loja e compra um smartphone ou notebook para trabalhar, sem sombra de dúvida, gastou dinheiro para ter o que pode ser considerado o ápice da evolução tecnológica da humanidade; um aparelho delicado e complexo que manipula a eletricidade para realizar bilhões de operações a cada segundo.

Por baixo daquele estilo e aparência modernos, os milhares de pequenos componentes eletrônicos lá dentro escondem um conceito muito mais simples do que se imagina; uma idéia que passa despercebida para a maioria das pessoas.

Jeu de cartes sur ardoise... bannière

Agora, em casa, com seu novíssimo baralho, o que pretende fazer com ele? Obviamente, pode jogar qualquer jogo de cartas, mas você é livre para fazer o que quiser com ele. Cartas são objetos físicos, são sua propriedade e pode usá-los como quiser. Pode pintar sobre sobre elas com canetinha, montar um castelo, contar quantas cartas o baralho tem, pode agrupar as cartas em cima da mesa para fazer uma belo desenho. Você escolhe.

Imagine que tenha colocado as cartas em cima da mesa, formando um belo padrão de cores. É uma obra de arte!

Deck of playing cards on blue background. Gambling concept

Imagine, também, que queira compartilhar essa obra com seu melhor amigo. O problema é que ele mora a centenas de quilômetros de distância, mas você quer que ele veja isso o quanto antes. Uma opção é pegar o telefone, ligar para ele e passar instruções para que ele possa remontar o desenho com algum outro baralho que ele tenha. Quando terminar de passar as instruções, ele terá uma réplica do seu desenho.

Agora… Vamos parar um pouco e pensar sobre alguns pontos importantes.

Seu amigo não tem o seu trabalho original. Nenhuma carta na mesa dele é sua. O que ele tem não é uma foto, não é uma cópia xérox, nem mesmo uma descrição detalhada. Ele realmente tem uma réplica exata. Mais importante ainda, perceba que a sua obra original nunca deixou sua mesa. Você continua com todas as suas cartas, na mesma ordem e na mesma quantidade. De forma literal, nenhum objeto físico foi movido de uma cidade a outra. Nenhuma imagem foi transmitida pelos cabos telefônicos ou por algum tipo de “encanamento mágico“. A única coisa que foi transmitida pelo telefone foi a sua voz, ou seja, instruções de como recriar o seu trabalho. Já que você e seu amigo falam a mesma língua, ele pode entender as instruções e criar uma réplica perfeita a centenas de quilômetros de distância. Nenhum talento necessário!

Ok, pera aí. É só isso?

Sim, realmente é. Confie! Meu diploma em Ciência da Computação pode ajudar a confirmar isso.

Pense na conversa telefônica que você teve com seu amigo como “sua conexão de Internet” e baralhos como sendo “computadores”. Cada pessoa tem seu próprio computador e dentro dele você tem pequenos blocos que podem ser organizados de qualquer forma, como se fossem cartas de um baralho.

Se você já tentou imaginar o significado da expressão “informação digital”, as cartas do baralho são o melhor exemplo. Informação pode ser representada por pequenos blocos que podem ser manipulados e ordenados individualmente. Basicamente, todos os blocos são iguais. Assim como as cartas de um baralho podem estar viradas para cima ou para baixo, “blocos digitais” são pequenas peças eletrônicas que podem estar ligadas ou desligadas. A única coisa que importa para fazer sentido da informação que eles guardam é o propósito e a ordem em que são colocados.

Informação digital nunca chega a lugar algum porque, de fato, ela nunca sai do lugar de origem. A Internet realmente é uma rede de sinais eletrônicos, seja com fio ou sem fio. Tudo que se transmite são apenas instruções de como criar réplicas exatas do conteúdo original, efetivamente “copiando” a informação de um computador para dentro de outro.

Caso queira debater de forma sensata e concreta qualquer assunto relacionado à era digital em que vivemos, esse é o conceito mais básico que precisa ser compreendido antes da discussão. Torna-se relevante quando se percebe que todos os computadores do mundo são construídos dessa forma e todos funcionam exatamente do mesmo jeito.

Digamos que a discussão gira em torno de criar ou atualizar leis de direitos autorais, patentes, neutralidade da rede, privacidade, crimes cibernéticos, crypto-moedas… Seja qual for o assunto, lembre-se do baralho, pois tudo na Internet acontece dentro daquele mesmo cenário.

Sempre que ouvir uma sopa de letrinhas ou expressões complicadas de um especialista tentando explicar como essas coisas funcionam, lembre-se de que são apenas palavras bonitas que eles mesmos inventaram para organizar a complexidade e as dificuldades de construir máquinas que, no fundo, fazem apenas isso: processar e replicar informação de um lugar para outro.

Como customizar uma imagem ubuntu-cloud usando o cloud-init no VirtualBox

Uma versão prática deste exemplo pode ser encontrada no Gitlab:

🔗 https://gitlab.com/juliohm1978/cloud-init-example

Documentação do cloud-init: 🔗 https://cloudinit.readthedocs.io/en/latest/

  • Importar a imagem para o VirtualBox

    No VirtualBox, clique no botão de importação.

    Selecione a imagem OVA que vocẽ baixou.

    Alguns parâmetros da VM podem ser alterados neste momento. Não se esqueça de escolher no Mac Address Policy: Generate new MAC address for all network adapters.

  • Configurar a porta serial do console

    Devido a um problema na configuração desta imagem, ela não consegue iniciar sem a existência de uma porta serial para o console principal.

    Launch Pad Bug #1573095

    Sem a portal serial, a imagem trava durante o boot e não responde. Para contornar o problema, configure a porta serial enviando seu conteúdo para qualquer arquivo temporário — ex: /tmp/serial.log.

    DICA: Você pode visualizar o conteúdo do console em outro terminal para ver informações detalhadas do boot do sistema operacional e a execução do cloud-init.

    tail -F /tmp/serial.log
    

  • Prepare uma imagem ISO com as suas customizações

    Instale as ferramentas do cloud-init.

    sudo apt install cloud-image-utils
    

    Crie os arquivos meta-data.yaml, network-config.yaml e user-data.yaml.

    meta-data.yaml

    dsmode: local
    

    network-config.yaml

    version: 2
    ethernets:
      enp0s3:
        dhcp4: true
    

    user-data.yaml

    #cloud-config
    system_info:
      default_user:
        name: user
        gecos: user
        groups: [wheel, adm]
        sudo: ["ALL=(ALL:ALL) ALL"]
        shell: /bin/bash
    password: user
    ssh_pwauth: true
    chpasswd:
      expire: false
    
    

    Crie a imagem iso usando o comando cloud-localds.

    cloud-localds -v cloud-init.iso --network-config=network-config.yaml user-data.yaml meta-data.yaml
    
  • Anexar a ISO à VM

    Nas configurações da VM, adicione uma unidade cdrom na controladora IDE.

    Adicione e escolha a ISO que você acabou de criar.

  • Configure as placas de rede da VM

    Para este teste simplificado, configure apenas uma placa de rede com NAT.

  • Faça um snapshot da VM zerada

    Antes de iniciar qualquer atividade, faça um snapshot da VM neste momento.

    É importante fazer o snapshot ANTES do primeiro boot. Assim vocẽ poderá retornar ao ponto de partida para realizar testes com diferentes configurações no user-data.

  • Iniciar a VM

    Faça o boot da imagem e confira no /tmp/serial.log o resultado. Mensagens do cloud-init devem aparecer durante o andamento.

    Ao final, você poderá entrar na VM com usuário user e senha user.

  • Customize ainda mais

    Volte o snapshot inicial quantas vezes quiser para testar configurações mais avançadas.

    LEMBRE-SE❗: Sempre que modificar os arquivos Yaml (user-data, network-config ou meta-data) é preciso recriar a imagem ISO.

    Confira exemplos mais completos na documentação oficial.

    🔗 https://cloudinit.readthedocs.io/en/latest/topics/examples.html

    DICA: Para poder acessar a VM via SSH, será preciso adicionar outra placa de rede com Host-Only Network.

Como instalar o Docker

Versão 19.03.5.

Modo mais rápido

Um script de instalação fica hospedado em https://get.docker.com. Ele pode ser usado na maioria das plataformas Linux.

curl -Ls https://get.docker.com > instalador.sh

## confira o conteúdo de instalador.sh antes de continuar

sudo sh instalador.sh

Em diferentes plataformas

Informações detalhadas sobre a instalação em cada plataforma em

🔗 https://docs.docker.com/get-docker/

Por exemplo, como instalar no Ubuntu:

🔗 https://docs.docker.com/install/linux/docker-ce/ubuntu/

Pós instalação

Por questões de segurança, seu usuário não terá permissões para criar ou executar contêineres.

O comando docker pode ser executado com sudo.

sudo docker [build|create|run...]

Para dar permissões ao seu usuário, basta incluí-lo no grupo docker.

CUIDADO: Qualquer usuário com permissões para criar e executar contêineres pode se comportar como administrador/root do sistema operacional.