Inscreva-se no DevOpsDays Brasília

É isto mesmo que você leu, vai ter DevOpsDays em Brasília e as inscrições para o evento já estão abertas, são apenas 280 vagas a venda, não perca a oportunidade de participar do evento que criou o termo “devops”.

Site do evento

http://brasilia.devopsdays.com.br

Agenda no site devopsdays.org

https://www.devopsdays.org/events/2016-brasilia/welcome/

Caso queira palestrar no evento o CFP também está aberto

http://brasilia.devopsdays.com.br/about/cfp/

Site para inscrições (eventize)

http://brasilia.devopsdays.com.br/post/registration_open/

Use o código DC61975969 para ganhar 20% de desconto na inscrição (Early Bird), esse desconto é limitado, aproveite!

O que é o DevOpsDays?

O DevOpsDays Brasília, associado e reconhecido pelo DevOpsDays.org, tem como objetivo reunir os interessados no assunto DevOps através da apresentação de palestras, painéis, minicursos e outras atividades. Considerando o aumento do interesse no desenvolvimento de software e cultura Ágil no Brasil, acreditamos que falar sobre DevOps é uma necessidade. O DevOpsDays Brasília 2016 vem preencher essa lacuna, uma vez que esse assunto ainda não foi tratado de forma sistemática em um evento próprio, mesmo com a atual e crescente demanda no Brasil. Pretendemos para esse evento convidar profissionais de empresas e organizações conhecidas no cenário de tecnologia da informação, para assim motivar a ampla participação, não somente de pessoas que já conhecem a cultura DevOps, mas também despertar o interesse daqueles que ainda não conhecem.

Nos vemos lá!

[s]
Guto

Box vagrant para projeto PCP

Criei uma box vagrant para facilitar o uso do PCP.

https://atlas.hashicorp.com/gutocarvalho/boxes/centos7x64-pcp

Essa box contém o PCP com os pacotes nas seguintes versões

  • Pupper Agent 4.6.2
  • Mcollective 2.9.0
  • Hiera 3.2.1
  • Facter 3.4.1
  • Puppet Server 2.6.0
  • PuppetDB 4.2.2
  • R10k 2.4.3
  • PostgreSQL 9.5.4
  • PuppetBoard 0.2.0
  • ActiveMQ 5.14.0

Recomendo usar o vagrant 1.8.4 e virtualbox 5.0.26.

1. Instalando a box

Para instalar a box digite o comando abaixo no terminal

vagrant box add gutocarvalho/centos7x64-pcp

Crie um diretório para o projeto

mkdir pcp; cd pcp

Crie um arquivo Vagrantfile no diretorio com o conteúdo abaixo

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  if Vagrant.has_plugin?("vagrant-hosts")
    config.vm.provision :hosts do |provisioner|
      provisioner.add_localhost_hostnames = false
      provisioner.autoconfigure = true
      provisioner.sync_hosts = true
      provisioner.add_host '192.168.250.35', ['puppet']
      provisioner.add_host '192.168.250.35', ['puppetdb']
    end
  end

  config.vm.box = "centos7-pcp"

  # puppet community platform

  config.vm.define "puppetserver" do |puppetserver|
    puppetserver.vm.hostname = "puppet-pcpm.hacklab"
    puppetserver.vm.network :private_network, ip: "192.168.250.35"
    puppetserver.hostsupdater.aliases = ["puppetboard.hacklab", "puppetexplorer.hacklab"]
    puppetserver.vm.provider "virtualbox" do |v|
      v.customize [ "modifyvm", :id, "--cpus", "2" ]
      v.customize [ "modifyvm", :id, "--memory", "3072" ]
      v.customize [ "modifyvm", :id, "--name", "puppet-pcpm.hacklab" ]
    end
  end

end

Instale os seguintes plugins

vagrant plugin install vagrant-hosts
vagrant plugin install vagrant-hostsupdater

Inicie o projeto

vagrant up

Acesse a vm

vagrant ssh

Divirta-se.

2. refs

Box source

Project PCP

[s]
Guto

Novo PCP liberado com muitas novidades

O time do PCP acaba de finalizar uma atualização que traz as últimas versões de pacotes disponíveis.

  • Pupper Agent 4.6.2
  • Mcollective 2.9.0
  • Hiera 3.2.1
  • Facter 3.4.1
  • Puppet Server 2.6.0
  • PuppetDB 4.2.2
  • R10k 2.4.3
  • PostgreSQL 9.5.4
  • PuppetBoard 0.2.0
  • ActiveMQ 5.14.0

O PCP agora está de casa nova, a partir dessa versão estamos usando o GitLab.com como repositório.

Se tiver dúvidas entre na comunidade PCP no telegram

http://bit.ly/telegram-pcp

Divirta-se!

[s]
Guto

Nova box vagrant com Puppet Server 2.6.0 em CentOS 7

Divulgando nova box CentOS 7.2 com Puppet 4.6.2 e Puppet Server 2.6.0 no atlas. Agora fica mais fácil testar a última versão do Puppet Server com o menor esforço possível :)

1. Instalando a box

Se você usa vagrant 1.8.x para fazer download da box digite

vagrant box add gutocarvalho/centos7x64-puppetserver

Crie um diretório para o projeto

mkdir centos7-puppetserver; cd centos7-puppetserver

Crie um arquivo Vagrantfile no diretorio com o conteúdo abaixo

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.hostname = "puppetserver.hacklab"
  config.vm.box = "gutocarvalho/centos7x64-puppetserver"
  config.vm.network "private_network", ip: "192.168.250.47"
  config.vm.provider "virtualbox" do |virtualbox|
    virtualbox.customize [ "modifyvm", :id, "--cpus", "1" ]
    virtualbox.customize [ "modifyvm", :id, "--memory", "3072" ]
    virtualbox.gui = true
  end
  if Vagrant.has_plugin?("vagrant-cachier")
    config.cache.scope = :box
  end
end

Inicie o projeto

vagrant up

Acesse a vm

vagrant ssh

2. Refs

Para acessar dados da box

https://atlas.hashicorp.com/gutocarvalho/boxes/centos7x64-puppetserver   

O repo git com o código para build da box

https://gitlab.com/gutocarvalho/packer-centos7-puppetserver

É isso, divirta-se.

[s]
Guto

Criando instalador USB do MacOS Sierra

Para quem leu o último artigo e ficou curioso sobre como criar um instalador do Sierra para o MacOS, segue um tutorial em pt_BR para te ajudar.

Requisitos

É requisito desse tutorial ter o App que instala o MacOS Sierra em seu sistema, esse instalador deve aparecer no Launchpad ou no diretório de aplicativos.

Se você quiser baixar a versão GM use o link abaixo

https://beta.apple.com/sp/betaprogram/guide

É necessário ter um dispositivo USB.

1. Dispostivo USB

Reserve um dispositivo USB de 16 GB para utilizar como instalador, de preferência USB 3 — quanto mais rápido melhor.

Se existem arquivos importantes copie para outro local pois o processo de criação do instalador irá apagar todos os dados do USB Stick.

2. Rename no dispositivo

Insira seu USB Stick e liste os dispositivo conectados no terminal

diskutil list

Depois de identificar o nome do seu dispositivo faça o rename

sudo diskutil rename "GUTO 16G" SierraInstaller

O comando acima foi um exemplo, troque “GUTO 16G” pelo nome real do seu dispositivo

3. Criando o instalador

Este é o processo que irá criar o instalador

3.1 GM Build

Se estiver usando a versão GM rode o comando abaixo no seu terminal

sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/SierraInstaller --applicationpath /Applications/Install\ macOS\ Sierra.app --nointeraction &&say Done

A versão GM já é um build fechado, muito próximo do que será apresentado no dia 20, apenas pequenas correções serão adicionadas até dia 20 na versão definitiva.

3.2 Public Beta Build

Se estiver usando a versão Public Beta, rode o comando abaixo no terminal

sudo /Applications/Install\ macOS\ Sierra\ Public\ Beta.app/Contents/Resources/createinstallmedia --volume /Volumes/SierraInstaller --applicationpath /Applications/Install\ macOS\ Sierra\ Public\ Beta.app --nointeraction &&say Done

3.3 Developer Preview Beta Build

Se estiver usando a versão Developer Preview Beta, rode o comando abaixo no terminal

sudo /Applications/Install\ 10.12\ Developer\ Preview.app/Contents/Resources/createinstallmedia --volume /Volumes/SierraInstaller --applicationpath /Applications/Install\ 10.12\ Developer\ Preview.app --nointeraction &&say Done

4. Processo de criação

Após rodar o comando você terá uma saída similar a esta

Erasing Disk: 0%… 10%… 20%… 30%…100%…
Copying installer files to disk…
Copy complete.
Making disk bootable…
Copying boot files…
Copy complete.
Done.

Isso pode demorar dependendo da velocidade do seu USB Stick.

5. Instalando via USB

Após a criação do instalador, você verá no Finder o instalador disponível como dispositivo externo, agora você só precisa reiniciar segurando OPTION e escolher o instalador USB na hora do boot.

Refs

[s]
Guto

Aquecimento para o MacOS Sierra

1. Compatibilidade

1.1 Hardware

A primeira coisa que você precisa saber é que o MacOS Sierra vai funcionar com Macs late 2009 pra frente. Clique em “/About” e veja se seu computador será compatível com o Sierra.

Modelo mínimo

  • MacBook: late 2009 and later
  • MacBook Air: 2010 and later
  • MacBook Pro: 2010 and later
  • iMac: late 2009 and later
  • Mac Mini: 2010 and later
  • Mac Pro: 2010 and later

1.2 Software

Vale conferir se todos os softwares que você usa para trabalho ou lazer funcionarão no MacOS Sierra, acesse o site do fabricante, pesquise no google, acompanhe a galera que já está usando o Beta, isso é importante, é melhor adiar o upgrade do que atualizar e ficar sem um recurso importante no seu sistema.

Eu por exemplo atualizei pro El Capitan cedo demais e fiquei sem o TotalFinder, meu Bartender ficou funcionando parcialmente, as libs que eu usava para gerar PDFs no terminal não funcionavam mais, o discador da Huawei que eu usava para conectar meu modem USB 4G da Vivo não funcionava mais, muita coisa parou e me pegou de surpresa, eu tive que fazer downgrade, foi um grande tempo perdido. Tome todas as medidas para checar se tudo que usa é realmente compatível com o Sierra, fica a dica!

2. Atualize seus Apps

Nos dias próximos ao lançamento praticamente todos os seus Apps principais vão te informar de atualizações relacionadas a compatibilidade com o Sierra, aceite e faça todas as atualizações antes do upgrade.

3. Faxina

Aproveite para fazer aquela faxina no disco para liberar espaço para o upgrade, o El Capitan — por exemplo — necessita de 8.8 GB do disco livre para instalação, portanto, recomendo que tenha pelo menos 15 GB livre no disco para fazer esse upgrade pro Sierra com tranquilidade, remover aplicativos que você não usa ajuda bastante.

Se você não reinicia o seu MacOS há muitos dias, semanas ou meses — como eu faço — é uma boa pedida reiniciar para limpar caches e arquivos temporários do disco.

Você pode usar um App como o CleanMyMac3 para rodar uma rotina completa de limpeza e manutenção do MacOS e pode até remover APPs por ele. Caso não use o CleanMyMac, o Magican é uma opção free muito boa que tem inclusive scanner anti-trojan.

http://www.magicansoft.com/

Recomendo também rodar um antimalware para remover qualquer traço de softwares indesejados no seu sistema, a malwarebytes oferece um free que é muito eficaz.

https://www.malwarebytes.com/mac-download/

Se você desligou o rootless do El Capitan — csrutil — ative novamente antes do upgrade.

Por fim, rode uma rotina de verificação do disco usando o disk utility e com isso você estará quase pronto.

4. Backup

Antes de pensar em fazer o upgrade faça um backup completo no Time Machine, isso vai te dar segurança caso algo não funcione como deveria, com o backup você poderá fazer o restore do seu ambiente.

Eu faço sempre dois backups, um com o Time Machine e outro como CCC (Carbon Copy Cloner).

5. Conta no Apple ID

Após o upgrade o Sierra vai te pedir sua conta do iCloud, a partir do Sierra isso vai ser obrigatório devido a integrações com o Universal Clipboard e auto-unlock do MacOS — por proximidade — com Apple Watch, então, se você ainda não criou uma conta, crie antes da instalação.

6. Atualização Limpa

As dicas acima foram para aqueles que vão realizar o upgrade do El Capitan para o Sierra, preservando os dados, contudo, há quem prefira fazer uma instalação limpa através de um usb stick. Eu normalmente opto por essa técnica. Para uma instalação limpa é necessário criar um instalador USB.

Abaixo alguns bons tutoriais que ensinam a fazer isso:

http://www.macworld.com/article/3092900/macs/how-to-create-a-bootable-macos-sierra-installer-drive.html
http://www.imore.com/how-make-bootable-macos-sierra-installer-drive
http://michaelcrump.net/create-macos-sierra-boot-disk/
http://osxdaily.com/2016/06/15/make-macos-sierra-beta-usb-boot-drive/

Faça seu backup, crie o instalador e depois faça a instalação.

7. Refs

Minhas imagens no Docker Hub

Criando minhas primeiras imagens para começar a estudar Docker de verdade.

Hub do Guto

https://hub.docker.com/u/gutocarvalho/

As duas imagens “-systemd” são bases para as imagens “-puppet”. A ideia é utilizar essas imagens para validar módulos Puppet dentro um pipeline que vai envolver dentre outras coisas do GitLab + GitLab CI.

Imagens disponíveis

Centos 7 + Puppet 4.6.2

https://hub.docker.com/r/gutocarvalho/centos-puppet/    

Ubuntu 16.04 + Puppet 4.6.2

  https://hub.docker.com/r/gutocarvalho/ubuntu-puppet/    

Vou postando minhas aventuras por aqui.

[s]
Guto

Atalhos no MacOS

Resolvi dar uma pesquisada sobre como fazer travessão e numerais e acabei descobrindo mais coisas, compartilho aqui minhas descobertas.

Travessão

Muitas pessoas tem dúvidas sobre como fazer o travessão no MacOs — eu também tinha.

Para fazer o travessão pressione SHIFT + ALT + hífen

Números ordinais

Outra coisa que eu queria aprender era fazer numerais ou números ordinais.

Para fazer o numeral (zero) pressione ALT + 0

Para fazer o numeral (a) pressione ALT + 9

Grau

SHIFT + ALT + 8

20°    

Copyright

OPTION + g

©

Registred

SHIFT + OPTION + r

Team

OPTION + 2

Não igual

OPTION + =

Menor igual

OPTION ,

Maior igual

OPTION .

Apple

SHIFT + OPTION + K

Pesquisando e aprendendo sempre.

Refs

[s]
Guto

Criando ubuntu usb installer no MacOS

Post #notamental que ensina como criar um usbstick no MacOS para instalar o Ubuntu 16.04.1.

1. Processo manual

1.1 Download da imagem

Abra seu terminal e crie um diretório tmp

mkdir tmp; cd tmp/

Faça download da imagem

wget http://releases.ubuntu.com/16.04/ubuntu-16.04.1-desktop-amd64.iso

1.2 Convertendo imagem

Precisamos converter essa imagem para conseguir criar o usb installer

hdiutil convert -format UDRW -o ubuntu-16.04.1-desktop-amd64.img ubuntu-16.04.1-desktop-amd64.iso

1.3 Detectando dispositivo usb

Insira o usb stick que você pretende usar e logo após faça a detecção de discos

diskutil list

Você verá uma saída como esta

/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.3 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage Macross                 499.4 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1 (internal, virtual):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macross                +499.0 GB   disk1
                                 Logical Volume on disk0s2
                                 9FE0CB11-FC20-4BB4-9353-E115CB1FBF94
                                 Unencrypted
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *1.0 TB     disk2
   1:                        EFI EFI                     209.7 MB   disk2s1
   2:                  Apple_HFS WD1TB                   999.8 GB   disk2s2
/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *7.9 GB     disk3
   1:               Windows_NTFS GUTO                    7.9 GB     disk3s1
/dev/disk4 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        +29.2 MB    disk4
   1:                  Apple_HFS UNetbootin              29.1 MB    disk4s1    

No meu caso vou usar o dispositivo /dev/disk3 de 8GB.

1.4 Desmontando dispositivo

Precisamos desmontar para gravar a imagem no dispositivo

diskutil unmountDisk /dev/disk3

1.5 Criando o instalador

Agora vamos transferir a imagem para o usb stick usando o dd

sudo dd if=ubuntu-16.04.1-desktop-amd64.img.dmg of=/dev/disk3 bs=1m

Esse processo pode demorar, dependerá da velocidade do usb stick, no final a saída será similar a esta

1443+1 records in
1443+1 records out

Ignore qualquer popup do finder que aparecer após a conclusão.

1.6 Ejetando o instalador

Ao final do processo ejete o usb stick

diskutil eject /dev/disk3

Pronto, agora você pode instalar o Ubuntu em qualquer computador com esse USB Stick.

Processo via script

Abaixo um exemplo de script para agilizar.

#!/bin/bash

ISONAME="ubuntu-16.04.1-desktop-amd64"
DEVICE="/dev/disk3"

echo "convertendo imagem $ISONAME..."

hdiutil convert -format UDRW -o /Users/gutocarvalho/storage/isos/$ISONAME.img /Users/gutocarvalho/storage/isos/$ISONAME.iso

echo "desmontando dispositivo usb $DEVICE..."

diskutil unmountDisk $DEVICE

echo "Criando instalador usb no dispositivo $DEVICE..."

sudo dd if=/Users/gutocarvalho/storage/isos/$ISONAME.img.dmg of=$DEVICE bs=1m

echo "desmontando dispositivo usb $DEVICE..."

diskutil eject $DEVICE

echo "criacao de disco finalizada."

Criei um snippet no GitLab para facilitar

https://gitlab.com/snippets/25673

[s]
Guto

Por onde iniciar os estudos sobre DevOps?

Muitas pessoas perguntam o que devem estudar ou quais cursos devem fazer para entrar de cabeça no mundo DevOps.

Não é uma resposta fácil, mas tenho algumas indicações para ajudar quem está começando.

1. Vídeos

10 Deploys per day at Flickr

Esse palestra foi a ignição que faltava para a criação do movimento/cultura DevOps em 2009.

https://www.youtube.com/watch?v=LdOe18KhtT4

Entenda as origens DevOps

Vídeo rápido de Damon Edwards (devopsdays core member) acerca das origens do movimento, recomendo.

https://www.youtube.com/watch?v=o7-IuYS0iSE

What is DevOps? - In Simple English

Vídeo curtinho do rackspace que também ajuda.

https://www.youtube.com/watch?v=_I94-tJlovg

DevOpsConf - DevOps State of the Union (John Willis)

Palestra do John Willis (devopsdays core member) na DevOpsCon 2015 sobre o estado do DevOps após 5 anos de seu surgimento.

https://www.youtube.com/watch?v=8rM8lYaMVBE

Five Years of DevOps (Patrick Debois)

Patrick Debois o criador do DevOpsDays e do termo DevOps fala o que achou dos últimos 5 anos de DevOps.

https://www.youtube.com/watch?v=uRMV6tT_mu0

2. Acrônimos

Entenda o que é CAMS

http://devopsdictionary.com/wiki/CAMS

Entenda o que é CALMS

http://whatis.techtarget.com/definition/CALMS

Entenda o que é ICE

http://radar.oreilly.com/2015/01/devops-keeps-it-cool-with-ice.html

Entenda o que é DevSecOps

 http://www.devsecops.org/blog/2015/2/15/what-is-devsecops    

3. Roteiro de estudos

Essa sugestão de estudos é baseada na estrutura CAMS do Willis e Edwards.

3.1 Cultura

  • Estude a metodologia ágil de desenvovlimento
  • Estude metodologias ágeis em geral
  • Estude Scrum
  • Estude Kanban
  • Estude Lean
  • Entenda o que é uma cultura de colaboração e feedback.

Faça um exercicio e tente enxergar os principais problemas culturais do seu time/organização e encontre uma forma corrigir tais problemas adaptando esses métodos.

3.2 Automação

  • Estude virtualização
  • Estude cloud computing
  • Estude Mark Burgess e gerência de configurações
  • Estude infraestrutura como código
  • Conheça pelo menos duas ferramentas de Gerência de Configuração (CFEngine e Puppet)
  • Conheça pelo menos duas ferramentas de Orquestração (Fabric e Ansible)
  • Entenda o que é VCS (Version Control System)
  • Estude GIT pra valer
  • Estude workflows de desenvolvimento usando GIT (olhe os projetos opensource)
  • Estude Continuous Integration
  • Estude Continuous Delivery
  • Estude Continious Deployment
  • Estude TDD/BDD/ATDD
  • Estude Load Testing
  • Estude Stress Testing
  • Estude Security Testing
  • Estude Containers e Docker
  • Estude Microservicos
  • Estude ferramentas para fazer provisionamento automatizado
  • Estude ferramentas de autoserviço
  • Estude sistemas Unix e Linux
  • Estude networking
  • Estude e domine pelo menos 2 linguagens interpretadas (Ruby e Python)
  • Conheça pelo menos 1 stack de cada linguagem
  • Estude a linguagem shell

Labs sugeridos

  • Tente subir uma stack full de automação (ex. puppet)
    • Tente automatizar confs simples do OS (ex. centos)
    • Tente automatizar a instalacao e configuracao de um APP (ex. apache)
  • Tente provisionar VMs ou Containers de forma automatizada via autoserviço
  • Tente construir um pipeline de entrega
    • Indo desde o commit, passando por build, testes até o deploy em vm e container

3.3 Avaliação/Métricas

  • Entenda o que são métricas e pq são importantes
  • Estude real-time-metrics
  • Estude ferramentas APM
  • Conheca bem pelo menos duas ferramentas de monitoramento (Nagios/Zabbix)
  • Estude algum stack para tratamento de logs (ELK)
  • Estude algum stack para coleta e armazenamento métricas (Collectd/Statsd/Graphite/Graphana)

Labs sugeridos

  • Tente subir uma stack full de gestao de logs (ex. ELK)
    • Coloque diversos APPs para jogar dados lá
  • Tente subir um stack full de gestao de dados
    • Gere dados, colete, armazene e visualize com essa stack

3.4 Compartilhamento

  • Entenda a cultura de dividir responsabilidades
  • Entenda a cultura Blameless
  • Aprenda a compartilhar ferramentas entre todos os times
  • Aprenda a compartilhar código entre todos os times
  • Aprenda a compartilhar informações e dados
  • Procure sempre melhorar o processo de comunicação
  • Entenda como funcionam times de produtos
  • Ofereça feedback constante entre os times
  • Volte pra cultura e reinicie o ciclo até aqui
  • Entenda e pratique Dojos
  • Entenda os Hackerspaces
  • Entenda os Hackatons

Cada eixo desse do roteiro de estudos tem cursos disponíveis no mercado, documentação farta online, artigos variados na rede.

Evite procurar por uma formação DevOps no mercado, o ideal é que você mesmo crie um roteiro de estudos.

Se encontrar alguma formação DevOps no mercado, fique alerta, tome muito cuidado para não ser uma empresa inventando algo só para faturar em cima da Buzzword DevOps, não invista seu dinheiro nesses cursos mágicos, como voce viu DevOps é algo amplo, difícil de colocar em um curso de 24 ou 40 horas, procure cursos especializados em centros reconhecidos ou oficiais, vá passando um assunto por vez, um curso por vez se você for da linha dos cursos, se for da linha da autodidaxia, mergulhe nas comunidades, leia, pergunte, compartilhe e aprenda junto conosco.

Coloquei esse guia no GitLab para receber contribs, mande PRs quando quiser.

Agora é começar os estudos, divirta-se!

[s]
Guto