Gerenciamento de vários computadores

Resultado de imagem para Ansible

O que é o projeto Ansible?

    O projeto Ansible é uma ferramenta open source de gerenciamento de aplicações, deploys e automação de tarefas, podendo controlar milhares de máquinas de uma só vez. Ideal para tarefas repetitivas e simplificação de complexas estruturas, fazendo assim seu time ganhar mais foco e produtividade. Sendo sua curva de aprendizado muito menor para qualquer tipo de pessoa, seja ela administradora de redes, programadores e novos usuários. Ocorrendo de ser simples, poderoso e ágil você poderá começar a configurar suas aplicações escalonadamente de forma rápida e segura.

Sua estrutura

    O Ansible usa PlayBooks (Figura 1) para descrever seus trabalhos (jobs) ou seja os comandos (plays) de configuração das máquinas (exemplo, instalar o servidor apache em todas elas), onde cada um desses plays existe uma tarefa (tasks) a ser cumprida , esses PlayBooks geralmente são escritos com uma linguagem de programação muito simples, chamada de YAML na qual é uma linguagem de serialização de dados legíveis para os seres humanos. Um exemplo de código YAML pode ser visto no Código 1.

--- # Em Bloco 
nome: Pedro 
idade: 23 
--- # Em linha 
{nome: Pedro, idade: 23}

                Código 1 – Vetores Associativos

Figura 1 – Exemplo de PlayBook

    Uma vantagem do Ansible é que ele não precisa estar conectado nas máquinas (nós) em que você quer configurar, pois ele conecta usando somente o ssh. Depois de conectar com os nós  ele envia pequenos programas chamados “Ansible Modules” para executar determinadas tarefas que você queira.

Um outro arquivo importante é o inventário (Inventory) um arquivo de texto simples(Código  2) onde existe os hosts disponíveis (endereços dos nós), na qual poderá agrupar esses nós por nomes para um melhor gerenciamento. Uma visão geral do programa é apresentado na Figura 2. 

[webservers]
foo.example.com
bar.example.com

[dbservers]
one.example.com
two.example.com
three.example.com

Código 2 – Exemplo de Inventory contendo dois grupos, um grupo de servidores web e outro de servidores de banco de dados.

Figura 2 – Visão Geral do Ansible

    O ansible tem o suporte para o encapsulamento de PlayBooks, o que é transformado em uma regra (Role), essas roles podem ser usadas em diferentes contextos e cenários, podendo ser compartilhadas em uma espécie de rede social chamada Ansible Galaxy, na qual contém milhares de roles feitas por usuários que podem ser baixadas e customizadas para fazer os seus próprios Playbooks.

Instalação

    Para fazer a instalação do Ansible no Ubuntu, basta digitar os seguintes comandos:

APT-UBUNTU:

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible

YUM:

$ sudo yum install ansible

PKG:

$ sudo pkg install ansible

Feito isso você já terá instalado o programa.

Ansible Tower

    O Ansible Tower é um painel de gerenciamento com interface gráfica (Figura 3) onde contém uma série de funcionalidades, dentre elas:

  1. Controle de acesso baseado em função
  2. APIs RESTful
  3. agendamento de tarefas
  4. gerenciamento gráfico de inventory’s
  5. Auditoria nos Logs
  6. Escalável

Figura 3 – Visão geral do Ansible Tower

Referências

[ 1 ] – http://app.engage.redhat.com/e/er?s=1795&lid=128170&elqTrackId=9174ee066a604c308ee2406d8e053567&elq=8f38a0f6aa0c4a689f4c42edd5ea31ff&elqaid=63956&elqat=1

[ 2 ] – https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html

Comandos do VIM

Figura 1 – Tela inicial do VIM

Gosto muito do editor VIM, ele é muito pratico e rápido quando eu estou fazendo tarefas através do terminal e preciso editar algo rapidamente. Aqui estão alguns comandos que eu mais uso no VIM.

Modos

No VIM existem 3 modos, o Command Mod, Insert Mod, e o Visual Mod. Mas vamos nos atentar para os 2 primeiros.

Quando você entra no VIM ele vai estar no Command Mod, como o próprio nome já refere é o modo aonde você pode digitar comandos para que o editor, como salvar, sair, mostrar linhas.

Já o Insert Mod, é para que você possa escrever dentro do editor, para alternar do Command Mod para o Insert Mod, você irá pressionar a tecla “I”.

E para alternar entre o Insert Mod para o Command Mod, você irá pressionar a tecla “ESC”.

Comandos no Terminal

$ vim nome_do_arquivo.txtAbrir ou criar um arquivo.
$ vim -p arq1.txt arquivo2.txtAbrir múltiplos arquivos.

Comandos no VIM

Para ordenar comando nos Command Mod, você terá que precionar a tecla “:” e logo em seguida digitar o comando que desejar.

Figura 2 – Tela do VIM em Command Mod

A seguir uma lista de comandos para o Command Mod:

:wSalvar arquivo atual.
:qSair do arquivo atual sem salvar.
:wqSalvar e sair.
:q!Forçar saída.
:set nuHabilitar números nas linhas.
gtIr para o próximo arquivo, se abriu múltiplos arquivos.
gTIr para o arquivo anterior.
iIr para o Insertion Mod.
oAdicionar uma linha abaixo.
OAdicionar uma linha acima.
yCopia as 2 primeiras linhas em que o cursor esta.
[i]yCopia as [i] primeiras linhas (Ex: 5y)
pCola o que foi copiado.
ddApaga a linha atual.
[i]ddApaga as [i] próximas linhas.
uDesfaz a ultima modificação.

Referências

[ 1 ] – https://coderwall.com/p/adv71w/basic-vim-commands-for-getting-started

[ 2 ] – https://www.radford.edu/~mhtay/CPSC120/VIM_Editor_Commands.htm

Interface Gráfica via SSH

SSH

As vezes somente aquelas letras que aparecem no terminal não é o suficiente para que você tenha uma boa noção do que esta acontecendo do outro lado do SSH.

Digamos que você queira acessar o firefox da outra maquina, e quer visualizar, como fazer? como habilitar a GUI via SSH?

X11 Forwarding

O X11 forwarding, é uma maneira que permite que os usuários executem graficamente os programas da maquina remota em sua máquina local.

Para habilitar você deverá modificar o arquivo ssh_config no computador remoto:

$ vim /etc/ssh/ssh_config

e adicionar a linha:

ForwardX11 yes

E pronto! Para utilizar abra o terminal na sua máquina e digite:

$ ssh -X nome_do_usuario@numero_do_host

Referências:

[ 1 ] – https://www.businessnewsdaily.com/11035-how-to-use-x11-forwarding.html

[ 2 ] – https://www.quora.com/What-is-X11-forwarding

[ 3 ] – http://wiki.linuxquestions.org/wiki/X11_forwarding_with_OpenSSH

Personalizar comandos no Shell

Algumas vezes tenho que usar alguns comandos que simplesmente eu não consigo lembrar, por falta de pratica ou costume, por exemplo o comando de excluir recursivamente no Linux.

Por isso acabei criando um arquivo de texto aonde escrevo todos os comandos que eventualmente eu precise lembrar. Este arquivo se chama chapolin.txt.

Mas toda vez que eu quero visualizar o conteúdo deste arquivo, eu tenho que ficar digitando o comando:

$ cat ~/diretorio/pasta/chapolin.txt

Convenhamos que as vezes isso pode se tornar maçante, mas pois bem, no Linux existe um arquivo chamado ./bashrc que contem as configurações do terminal do usuário aonde você poderá editar para criar seus próprios comandos.

Bashrc

Para editar digite em seu terminal:

$ sudo vim ~/.bashrc

Irá abrir o editor vim para fazer as edições, aperte a tecla end para ir no final do arquivo e depois a tecla “o” para inserir uma nova linha e escreva:

alias chapolin="cat ~/diretorio/pasta/chapolin.txt"

E pronto, a palavra alias é um apelido que voce da para um certo comando, nesse caso quando digitarmos chapolin no terminal ele ira executar o cat.

Referências:

[ 1 ] – https://www.vivaolinux.com.br/dica/Arquivo-.bashrc

Make e Makefile

Resultado de imagem para GNU Make

Make é um utilitário que agiliza a compilação de programas, onde através de um arquivo de configuração (normalmente chamado Makefile), ele encontrara diretivas e regras para executar a compilação.

Sintaxe

O arquivo de configuração (Makefile) tem que ser escrito com uma sintaxe própria, o seu template pode ser definida como:

regra: dependências 
          comando1          
          comando2         
          comando3

regra: É o nome da regra que você quer criar.

dependências: São os pré-requisitos para o programa ser gerado, essas dependências devem ser satisfeitas antes que os comandos daquela determinada regra sejam executados.

comando: É a ordem dos comandos a serem executadas depois que as dependências tiverem sido satisfeitas.

Exemplo

hello.c

#include <stdio.h>
#include <stdlib.h>
int main (){
    printf("Hello World!\n");
    return 0;
}

Para executar:

 
$ gcc hello.c -o hello
$./hello

Makefile

Podemos escrever essa mesma ordem de comandos no arquivo Makefile, que ficaria assim:

hello: hello.c
	gcc hello.c -o hello
        ./hello

Para executar o arquivo, digite o seguinte comando:


$ make
# ou executar
$ make hello

Os dois comandos acima vão executar a mesma coisa, se você digitar só “make” ele irá por padrão rodar somente a primeira regra escrita no Makefile.

Variáveis

No Makefile é possível ter variáveis, você pode escrevê-las da seguinte maneira:


CC := gcc
hello: hello.c
	$(CC) hello.c -o hello
        ./hello

Sua sintaxe é NOME_DA_VARIAVEL := VALOR_DA_VARIAVEL, e para usar nos comandos é só colocar $(NOME_DA_VARIAVEL).

Variáveis Automáticas

Assim como o argv e argc da main do C que serve para pegarmos os parâmetros passados pelo terminal, no make podemos pegar o nome da regra e suas dependências que estão em variáveis, as chamadas variáveis automáticas. Exemplo, o nome da regra é hello e o nome da saída do gcc também é hello, podemos usar então a variável $@ que nesse caso tem o valor de hello guardada dentro dela.

O arquivo Makefile ficará assim:


CC := gcc
hello: hello.c
	$(CC) hello.c -o $@
        ./hello

E a variável $^ indica uma lista das dependências daquela regra, no nosso caso o valor de $^ é hello.c, logo podemos mudar um pouco o nosso arquivo.


CC := gcc
hello: hello.c
	$(CC) $^ -o $@
        ./$@

Se você executar mais de um vez o arquivo make e não fez nenhuma alteração no arquivo hello.c, vai aparecer uma mensagem dizendo que esta tudo em ordem e nada foi modificado no arquivo e por isso não precisa compilar. Acaso você queira compilar mesmo assim é só apagar o arquivo executável ./hello, usando o comando rm no terminal:

$ rm ./hello

Ou criando uma regra com esse comando no Makefile:


CC := gcc
hello: hello.c
	$(CC) $^ -o $@
        ./$@
clean: hello
        rm $^

Dependências

Bom por fim a ultima coisa que você tem que saber é a ordem de dependências. Por exemplo eu quero que antes da regra de compilar eu quero que apareça no terminal uma mensagem, e depois da regra de compilação eu também quero que outra mensagem apareça, então o arquivo Makefile devera ser o seguinte.


CC := gcc

inicio: msg1 hello msg2

msg1: 
        @echo "Iniciando Compilação"

msg2:
        @echo "Finalizando Compilação"

hello: hello.c
	$(CC) $^ -o $@
        ./$@
clean: hello
        rm $^

Agora se você digitar make no terminal a regra inicial será inicio pois agora ela é a primeira. Nos pré-requisitos temos 3 parâmetros (que são os nomes das regras), que deveram ser executados na ordem, primeiro msg1, depois hello, e por fim msg2. Note que nas msg1 e msg2 eu utilizei @ antes do comando, fiz isso para que evite que esses comandos apareçam no terminal, e só oque vai aparecer é a saída de tal comando, o @ poderia ser empregado tanto na regra do hello: como no clean:

Referencias:

[ 1 ] – https://blog.pantuza.com/tutoriais/como-funciona-o-makefile

[ 2 ] – https://blog.pantuza.com/tutoriais/como-funciona-o-makefile

[ 3 ] – https://www.gnu.org/software/make/manual/make.html

[ 4 ] – http://orion.lcg.ufrj.br/compgraf1/downloads/MakefileTut.pdf

[ 5 ] – https://www.mat.uc.pt/~pedro/lectivos/ProgramacaoOrientadaObjectos/tutorialMakefilesPT.pdf

“Hello World” em C e Assembly

Resultado de imagem para assembly

Tenho interesse em Assembly desde que fiz uma matéria chamada Sistemas Microcontrolados, onde o professor nos deu um overview de como funcionava os registradores, a pilha (stack), e a como trabalhar com eles.

Na universidade sempre ouvimos alguém falar que o assembly é a fronteira final entre o que um humano pode entender e as instruções de maquina, a linguagem em que os drivers eram escritos, e se acaso você quiser algo rápido, deverá recorrer a ela. Lembro de ter me divertido muito, pois parecia que eu estava adentrando a um mundo novo que poucos conheciam, para mim era algo fascinante.

Para testar a veracidade dessas informações recriei dois códigos, um em linguagem C e outro em Assembly com a sintaxe AT&T.

hello.c

#include <stdio.h>
int main(){
 printf("Hello World\n");
 return 0;
}

Para compilar esse programa em C, use o seguinte comando:

gcc hello.c -o hello_c

Com isso terá gerado um executável com o nome de hello_c.

hello.s

.global _start

.text
_start:
        mov     $1, %rax       # SysCall(sys_write)
        mov     $1, %rdi       #FileDescriptor(stdout)

        mov     $message, %rsi  # Endereco da Mensagem
        mov     $13, %rdx       # Tamanho da Mensagem

        syscall                 # Chamando a Syscall


        mov     $60, %rax       # Syscall (exit)
        xor     %rdi, %rdi      # Retornando 0
        syscall                 # Chamando a Syscall
message:
        .ascii  "Hello World\n"

Ja para compilar este código em Assembly você terá que digitar:

gcc -c hello.s 

Que irá gerar um arquivo de saída hello.o e agora para linkar e virar um executável de vez:

ld hello.o -o hello_s

Os arquivos gerados são esses:

$ ls
hello.c  hello_c  hello.o  hello.s  hello_s

Sendo hello_c e hello_s executáveis.

$ ./hello_s
Hello World

$ ./hello_c
Hello World

E se compararmos os seus tamanhos:

$ ls -l
total 28
-rwxrwxr-x 1 michel michel 16696 fev 19 22:45 hello_c
-rwxrwxr-x 1 michel michel  4744 fev 19 23:00 hello_s

LinguagemTamanho
hello.c16696 bits
hello.s4744 bits
Tabela 1 – Comparação de tamanho entre os arquivo.

Ou seja o arquivo em Assembly é quase 4 vezes menor do que o arquivo compilado em C.

Referências:

[1] – https://pt.wikipedia.org/wiki/Linguagem_de_montagem_x86

[2] – https://www.cs.virginia.edu/~evans/cs216/guides/x86.html

[3] – http://flint.cs.yale.edu/cs421/papers/x86-asm/asm.html

[4] – https://montcs.bloomu.edu/Information/LowLevel/Assembly/asm-C.html#trivial

[5] – https://web.archive.org/web/20101010150001/http://code.google.com/p/bugsec/wiki/AssemblyArqComp

[6] – http://programminggroundup.blogspot.com/2007/01/chapter-3-your-first-programs.html

[7] – https://coolerlab.wordpress.com/2012/04/07/um-pouco-de-assembly-com-linguagem-c/

Comandos Básicos do IRC

Protocolo, Irc, Bate Papo, Ícone

O IRC é um protocolo de comunicação na Internet, que pode ser usado para trocar mensagem entre diversas pessoas, o usuário que possuir um cliente IRC pode se conectar a um servidor, onde dentro desse servidor (server) pode possuir varias salas (channels). Fazendo uma analogia, o servidor brasil.com pode possuir varias salas que são seus estados, #parana, #sao_paulo, #ceara.

Primeiro você deverá escolher o cliente que você vai utilizar, uma pesquisa rápida na internet você poderá encontrar varias opções dependendo do seu sistema operacional.

Depois você devera escolher um server, existem vários na internet. Alguns exemplos:

Do projeto Mozilla.

irc.mozilla.org:6667

Do freenode um dos servidores mais famosos da atualidade.

chat.freenode.net:6697

Note que depois do ‘:’ existe um numero, este numero indica a porta usada para acessar aquele servidor. Acessado o server você vai estar em uma especia de lobby, na qual poderá digitar alguns comandos.

ComandosDescrição
/server chat.freenode.net:6697Conectar ao servidor.
/join #nome_do_canalVocê entra em um canal especifico..
/leaveDeixar o canal atual.
/nick seu_nomeAtribui um novo nome de usuário.
/query nome_amigoAbre um chat privado com outra pessoa.
/msg NickServ REGISTER senha seu_emailRegistrar o seu nome naquele servidor.
/msg NickServ IDENTIFY senhaUma vez já registrado, use este comando para logar.
/dcc Send nome_amigoPermite enviar um arquivo.
/listLista de canais abertos no servidor.
Tabela 1 – Principais comandos no IRC

Referências:

[1] – https://www.vivaolinux.com.br/artigo/Vivaolinux-agora-com-canal-IRC

[2] – https://developer.mozilla.org/en-US/docs/Mozilla/Getting_started_with_IRC

[3] – http://web.archive.org/web/20180625030717/http://voltamirc.hub4ever.org/modules.php?name=Content&pa=showpage&pid=9

Começando com o QEMU

QEMU é um software livre escrito por Fabrice Bellard que implementa um emulador de processador, permitindo uma virtualização completa de um sistema PC dentro de outro. É uma alternativa ao Virtual Box.

Emular uma iso

qemu-system-x86_64 linux.iso

Criar um local para persistir minhas alterações

qemu-img create -f qcow2 linux.qcow2 50G

(50G é o tamanho do meu disco)

Ver Informação

qemu-img info linux.qcow2

Usar o espaço criado

qemu-system-x86_64 -hda linux.qcow2 -cdrom linux.iso -boot d

Adicionar memória

qemu-system-x86_64 -enable-kvm -m 2048 -name 'Meu Linux' -boot d -hda linux.qcow2 -cdrom linux.iso

Usar apenas o espaço criado


qemu-system-x86_64 -enable-kvm -m 2048 -name 'Meu Linux' -hda Linux.qcow2