Instalando o MariaDB no Mac OS X

A ideia aqui hoje é apresentar como é feito a instalação do MariaDB no Mac OS. A forma mais light de fazer isto é utilizando o Brew.

Abra o shell como usuário comum e execute o comando:

brew install mariadb

Após a instalação inicie o serviço do MariaDB:

mysql.server start

Caso queira iniciar o serviço automáticamente junto com o Mac execute o comando:

brew services start mariadb

Para logar use:

mysql -u root

Atualizando o MariaDB:
Para atualizar o MariaDB execute os comandos:

brew update

depois de atualizado execute o comando:

brew upgrade mariadb

Para atualizar a senha do root pelo terminal execute os comandos:

mysql -u root  
mysql> use mysql;  
mysql> update user set password=PASSWORD("NOVA SENHA DO ROOT") where User='root';  
mysql> flush privileges; 

Pronto o seu MariaDB estará instalado e rodando perfeitamente

Como desabilitar o Gatekeeper no Mac OS X

Gatekeeper é uma aplicação no Mac OS X que lê a assinatura de todos os aplicativos para Mac antes de executálos. Isto é interessante quando falamos em segurança mas muitas vezes isto enche o saco quando se trata de apps que você está acostumado a usar e que não possuem assinatura.

Para você resolver o problema é simples, o poderoso Shell tem a solução para isso. Você pode habilitar e desabilitar o recurso rapidamente através do shell.

Desabilitando o Gatekeeper
spctl –master-disable


Habilitando o Gatekeeper

spctl –master-enable

Pesquisa do site UpWork aponta quais as principais habilidades de TI buscadas em 2017

O site UpWork ( site de busca de trabalhos freelancer ) fez uma pesquisa e mostrou uma lista com as principais habilidades mais procuradas no primeiro semestre de 2017. Esta pesquisa mostra algumas tendências já comentadas aqui no blog como o aumento pela procura de realidade virtual que cresceu 300%.

  • 1) Realidade virtual
  • 2) Processamento de linguagem natural
  • 3) Econometria
  • 4) Sistema de Gerenciamento de Aprendizagem (LMS)
  • 5) Redes neurais
  • 6) Teste de penetração
  • 7) Auditoria de SEO
  • 8) Processamento de imagem
  • 9) Asana work-tracking
  • 10) Desenvolvimento de API do Facebook

    A pesquisa na integra pode ser vista em:
    https://www.upwork.com/press/2017/08/01/q2-2017-skills-index/

Desmestificando o Docker

Introdução

Os casos de uso apresentados são ilimitados e a necessidade sempre esteve lá. O Docker está aqui para oferecer a você uma eficiente e rápida maneira de portar aplicações entre sistemas e máquinas. Ele é leve e enxuto, permitindo a você rapidamente conter aplicações e as executar dentro de seus próprios ambientes seguros (via Contêineres Linux: LXC).

Neste artigo da DigitalOcean, pretendemos apresentá-lo minuciosamente ao Docker: um dos mais interessantes e poderosos projetos open-source a ganhar vida nos últimos anos. Docker pode ajudá-lo em tantas coisas que é injusto tentar resumir as suas capacidades em uma frase.

Glossário

1. Docker

2. O Projeto Docker e suas partes principais

3. Elementos do Docker

  1. Contêineres do Docker
  2. Imagens do Docker
  3. Dockerfiles

4. Como instalar o Docker

5. Como utilizar o Docker

  1. Iniciando
  2. Trabalhando com Imagens
  3. Trabalhando com Contêineres

Docker

Quer seja da sua máquina de desenvolvimento para um servidor de produção remoto, ou empacotando qualquer coisa para uso em outro lugar, é sempre um desafio quando se trata de portar sua pilha de aplicação juntamente com suas dependências e fazê-las funcionar sem tropeços. Na verdade, o desafio é imenso e as soluções até agora realmente não tem sido bem sucedidas para as massas.

Em poucas palavras, docker como um projeto oferece a você um conjunto completo de ferramentas de alto nível para transportar tudo que constitui uma aplicação entre sistemas e máquinas – virtual ou física – e trás consigo grandes benefícios agregados.

Docker alcança sua robustez de conter a aplicação (e, portanto, de processos e recursos) via Contêineres Linux (por exemplo, namespaces e outras características do kernel). Seus novos recursos vêm de componentes e partes próprias do projeto, que extraem toda a complexidade de trabalhar com ferramentas/APIs Linux de baixo nível usadas para o sistema e para gerenciamento de aplicação, no que diz respeito a conter os processos com segurança.

O projeto Docker e suas partes principais

O projeto Docker (que teve o código aberto pela dotCloud em Março de 2013), consiste de várias partes principais (aplicações) e elementos (utilizados por essas partes), as quais são todas (a maior parte) construídas em cima de funcionalidades já existentes, bibliotecas e frameworks oferecidos pelo kernel do Linux e por terceiros ( por exemplo LXC, device-mapper, aufs, etc.).

Partes principais do Docker

  1. docker daemon: usado para geneciar os contêineres docker (LXC) no host onde ele roda
  2. docker CLI: usado para comandar e se comuinicar com o docker daemon
  3. docker image index: um repositório (público ou privado) para as imagens do docker

Elementos principais do Docker

  1. Contêineres docker: diretórios contendo tudo que constitui sua aplicação
  2. docker images: imagens instantâneas dos contêineres ou do S.O. básico (Ubuntu por exemplo)
  3. Dockerfiles: scripts que automatizam o processo de construção de imagens

Elementos do Docker

Os seguintes elementos são usados pelas aplicações que formam o projeto docker.

Contêineres Docker

Todo o processo de portar aplicações usando docker depende, exclusivamente, do envio de contêineres.

Os contêineres docker são basicamente, diretórios que podem ser empacotados (agrupados com tar por exemplo) como qualquer outro, e então, compartilhados e executados entre várias máquinas e plataformas (hosts). A única dependência é ter os hosts ajustados para executar os contêineres (ou seja, ter o docker instalado). A contenção aqui é obtida através de Contêineres Linux (LXC).

LXC (Contêineres Linux)

Contêineres Linux podem ser definidos como uma combinação de várias funcionalidades de kernel (ou seja, coisas que o kernel pode fazer), que permitem o gerenciamento de aplicações (e recursos que elas utilizam) contidas dentro de seus próprios ambientes. Fazendo o uso de algumas funcionalidades (por exemplo namespaces, chroots, cgroups e perfis SELinux), o LXC contém os processos das aplicações e auxilia com seu gerenciamento, através da limitação de recursos, não permitindo que alcance além do seu próprio sistema de arquivos (acesso ao espaço de nomes – namespace – do pai), etc.

Docker, com seus contêineres, faz uso do LXC, contudo, também traz consigo muito mais.

Contêineres Docker

Os contêineres docker possuem várias características principais.

Eles permitem;

  • Portabilidade de aplicação
  • Isolamento de processos
  • Prevenção de violação externa
  • Gerenciamento de consumo de recursos

e mais, requerendo muito menos recursos do que máquinas virtuais tradicionais usadas para a implantação de aplicações isoladas.

Eles não permitem;

  • Mexer com outros processos
  • Causar “inferno de dependências”
  • Ou não trabalhar com um sistema diferente
  • Ser vulnerável a ataques e abusar de todos os recursos do sistema

e (também) mais.

Sendo baseado e dependendo do LXC, a partir de um aspecto técnico, estes contêineres são como um diretório (moldado e formatado). Isso permite portabilidade e construção gradual de contêineres.

Cada contêiner possui camadas como uma cebola e cada ação tomada dentro de um contêiner consiste em colocar outro bloco (que na verdade se traduz em uma simples mudança no sistema de arquivos) em cima do bloco anterior. E várias ferramentas e configurações fazem este trabalho de forma completamente harmoniosa (por exemplo o union file-system).

O que esta forma de ter contêineres permite é o imenso benefício de facilmente lançar e criar novos contêineres e imagens, que se mantém leves (graças a forma gradual e em camadas como elas são construídas). Como tudo é baseado em sistema de arquivos, tirar instantâneos (snapshots) e realizar reversões no tempo são processos baratos ( ou seja, realizado facilmente / não pesado em recursos), muito parecido com sistemas de controle de versão (VCS).

Cada contêiner docker inicia de uma imagem docker que forma a base para outras aplicações e camadas que virão.

Imagens Docker

As imagens docker constituem a base para os contêineres docker de onde tudo começa a se formar. Elas são muito similares às imagens de disco padrão de sistema operacional que são utilizadas para executar aplicações em servidores e computadores de mesa.

Tendo essas imagens (por exemplo uma base Ubuntu) permite-se a portabilidade perfeita entre sistemas.
Eles constituem uma base sólida, consistente e confiável com tudo o que é necessário para executar as aplicações. Quando tudo é auto suficiente e o risco de atualizações ou modificações em nível de sistema é eliminado, o contêiner torna-se imune a riscos externos que poderiam colocá-lo fora de ordem – evitando o “inferno de dependências”.

Quanto mais camadas (ferramentas, aplicações, etc) são adicionadas em cima da base, novas imagens podem ser formadas aplicando-se estas alterações. Quando um novo contêiner é criado a partir de uma imagem salva (ou seja, com as alterações aplicadas), as coisas continuam de onde pararam. E o sistema de arquivos union, traz todas as camadas juntas como uma entidade única quando você trabalha com um contêiner.

Essas imagens de base podem ser explicitamente declaradas quando se trabalha com o docker CLI para criar diretamente um novo contêiner ou, elas podem ser especificadas dentro de um Dockerfile para construção de imagem automatizada.

Dockerfiles

Dockerfiles são scripts contendo uma série sucessiva de instruções, orientações e comandos que devem ser executados para formar uma nova imagem docker. Cada comando executado traduz-se para uma nova camada da cebola, formando o produto final. Elas basicamente substituem o processo de se fazer tudo manualmente e repetidamente. Quando um Dockerfile conclui a execução, você acaba tendo formado uma imagem, que então, você utiliza para iniciar ( ou seja, criar) um novo contêiner.

Como instalar o Docker

No início, o docker estava disponível apenas no Ubuntu. Atualmente, com sua versão mais recente (0.7.1. de 5 de Dezembro), é possível implantar o docker em sistemas baseados no RHEL (por exemplo, CentOS) bem como outros.

Lembre-se de que você pode iniciar rapidamente utilizando a imagem da Digital Ocean, pronta para usar, construída sobre um Ubuntu 13.04.

Vamos passar rapidamente às instruções de instalação para Ubuntu

Instruções de instalação para Ubuntu

A maneira mais simples de obter o docker, além de usar a imagem da aplicação pré construída, é ir com um VPS (Virtual Private Server) Ubuntu de 64 Bits, versão 13.04.

The simplest way to get docker, other than using the pre-built application image, is to go with a 64-bit Ubuntu 13.04 VPS

Atualize seu droplet:

sudo aptitude    update
sudo aptitude -y upgrade

Certifique-se de que o suporte ao aufs está disponível:

sudo aptitude install linux-image-extra-`uname -r`

Adicione a chave do repositório do docker ao apt-key para verificação de pacotes:

sudo sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -"

Adicione o repositório do docker ao sources do aptitude:

sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"

Atualize o repositório com o novo acréscimo:

sudo aptitude    update

Finalmente, baixe e instale o docker:

sudo aptitude install lxc-docker

O firewall padrão do Ubuntu (UFW: Uncomplicated Firewall) bloqueia todo o encaminhamento de pacotes por padrão, o qual é necessário para o docker.

Habilite o encaminhamento com UFW:

Edite a configuração do UFW utilizando o editor de texto nano.

sudo nano /etc/default/ufw

Desça no arquivo e procure a linha iniciando com DEFAULTFORWARDPOLICY.

Substitua:

DEFAULT_FORWARD_POLICY="DROP"

Por:

DEFAULT_FORWARD_POLICY="ACCEPT"

Pressione CTRL+X e confirme com Y para salvar e sair.

Finalmente, recarregue o UFW:

sudo ufw reload

Para um conjunto completo de instruções, verifique a documentação de instalação do docker aqui.

Como usar o Docker

Uma vez que tiver o docker instalado, sua experiência de uso intuitiva o torna muito fácil de trabalhar. Neste momento, você deve ter o daemon do docker executando em segundo plano. Se não, utilize o seguinte comando para executar o daemon do docker.

Para executar o daemon do docker:

sudo docker -d &

Sintaxe de uso:

Usar o docker (via CLI) consiste em passar a ele uma cadeia de opções e comandos seguidos por argumentos. Por favor, observe que o docker necessita de privilégios sudo para funcionar.

sudo docker [option] [command] [arguments]

Nota: As instruções e explicações abaixo são fornecidas para serem utilizadas com um guia e para dar a você uma ideia geral de usar e trabalhar com o docker. O melhor caminho para tornar-se familiar com ele é praticando em um novo VPS. Não tenha medo de quebrar algo – de fato, faça coisas que quebrem! Com o docker, você pode salvar seu progresso e continuar a partir de lá muito facilmente.

Iniciando

Vamos começar vendo todos os comandos disponíveis que o docker tem.

Pergunte ao docker por uma lista de todos os comandos disponíveis:

sudo docker

Todos os comandos disponíveis atualmente (na versão 0.7.1):

attach    Attach to a running container
build     Build a container from a Dockerfile
commit    Create a new image from a container's changes
cp        Copy files/folders from the containers filesystem to the host path
diff      Inspect changes on a container's filesystem
events    Get real time events from the server
export    Stream the contents of a container as a tar archive
history   Show the history of an image
images    List images
import    Create a new filesystem image from the contents of a tarball
info      Display system-wide information
insert    Insert a file in an image
inspect   Return low-level information on a container
kill      Kill a running container
load      Load an image from a tar archive
login     Register or Login to the docker registry server
logs      Fetch the logs of a container
port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
ps        List containers
pull      Pull an image or a repository from the docker registry server
push      Push an image or a repository to the docker registry server
restart   Restart a running container
rm        Remove one or more containers
rmi       Remove one or more images
run       Run a command in a new container
save      Save an image to a tar archive
search    Search for an image in the docker index
start     Start a stopped container
stop      Stop a running container
tag       Tag an image into a repository
top       Lookup the running processes of a container
version   Show the docker version information
wait      Block until a container stops, then print its exit code

Verifique informações de sistema e versão do docker:

# Para informações gerais de sistema no docker:
sudo docker info

# Para versão do docker:
sudo docker version

Trabalhando com imagens

Como discutimos extensamente, a chave para começar a trabalhar com qualquer contêiner docker é utilizando imagens. Existem muitas imagens disponíveis gratuitamente através do docker image index e o CLI permite acesso simplificado para consultar o repositório de imagens e para baixar novas.

Quando estiver pronto, você pode também compartilhar sua imagem lá da mesma forma. Veja a seção sobre “push” mais abaixo para mais detalhes.

Procurando uma imagem docker:

# Uso: sudo docker search [nome da imagem]
sudo docker search ubuntu

Isto irá lhe fornecer uma lista muito longa de todas a imagens disponíveis que correspondem à consulta Ubuntu.

Baixando (PULLing) uma imagem:

Esteja você construindo / criando um contêiner ou antes de fazê-lo, você precisará ter uma imagem presente na máquina host onde os contêineres existirão. De forma a baixar as imagens (talvez após o “search”) você pode executar pull para obter uma.

# Uso: sudo docker pull [nome da imagem]
sudo docker pull ubuntu

Listando imagens:

Todas as imagens em seu sistema, incluindo aquelas que você criou através de commit ou salvamento (veja abaixo para detalhes), podem ser listadas utilizando “images”. Isto lhe fornece uma lista completa de todas as imagens disponíveis.

# Examplo: sudo docker images
sudo docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
my_img              latest              72461793563e        36 seconds ago      128 MB
ubuntu              12.04               8dbd9e392a96        8 months ago        128 MB
ubuntu              latest              8dbd9e392a96        8 months ago        128 MB
ubuntu              precise             8dbd9e392a96        8 months ago        128 MB
ubuntu              12.10               b750fe79269d        8 months ago        175.3 MB
ubuntu              quantal             b750fe79269d        8 months ago        175.3 MB

Salvando alterações em uma imagem

À medida que você trabalha com o contêiner e continua a realizar ações nele (por exemplo, baixar e instalar software, configurar arquivos, etc), para ter seu estado mantido, você precisa fazer “commit” ou salvar as alterações.
O salvamento garante que tudo continua de onde estava na próxima vez que você usar a imagem.

# Uso: sudo docker commit [ID do contêiner] [nome da imagem]
sudo docker commit 8dbd9e392a96 my_img

Compartilhando (PUSHing) imagens:

Embora isso seja uma pouco cedo neste momento – em nosso artigo, quando você tiver criado seu próprio contêiner, o qual você vai querer compartilhar com o resto do mundo, você pode usar push para ter a sua imagem listada no índice, onde todos poderão baixar e utilizar.

Por favor, lembre-se de fazer o “commit” ou salvar todas as suas alterações

# Uso: sudo docker push [usuário/nome da imagem]  
sudo docker push my_username/my_first_image

Nota: Você precisa registrar-se em index.docker.io para fazer o upload ou push de imagens no índice do docker.

Trabalhando com Contêineres

Quando você executa (run) qualquer processo utilizando uma imagem, em retorno, você terá um contêiner. Quando o processo não está executando ativamente, este contêiner será um contêiner non-running.
No entanto, todos eles residem em seu sistema até que você remova-os através do comando rm.

Listando todos os contêineres atuais:

Por padrão, você poderá usar o seguinte comando para listar todos os contêineres em execução (running):

sudo docker ps

Para obter uma lista de ambos, os que estão executando (running) e os que estão como non-running, utilize:

sudo docker ps -l 

Criando um novo Contêiner

Não é possível criar um contêiner sem executar nada (ou seja, comandos). Para criar uma novo contêiner, você precisa usar uma imagem base e especificar um comando para executar:

# Uso: sudo docker run [nome da imagem] [comando a executar]
sudo docker run my_img echo "hello"

# Para nomear um contêiner em vez de ter longos IDs
# Uso: sudo docker run -name [nome] [nome da imagem] [comando]
sudo docker run -name my_cont_1 my_img echo "hello"

Isto irá imprimir “hello” e você vai estar de volta onde você estava. (ou seja, no shell do seu host)

Como você não pode alterar o comando que você executou depois de ter criado um contêiner (daí, especificando um durante a “criação”), é uma pratica comum utilizar gerenciadores de processos e mesmo scripts de inicialização customizados para ser capaz de executar diferentes comandos.

Executando um contêiner:

Quando você criou um contêiner e ele parou (seja devido à finalização de seu processo ou por você pará-lo explicitamente), você pode usar “run” para ter o contêiner trabalhando novamente com o mesmo comando utilizado para criá-lo.

# Uso: sudo docker run [ID do contêiner]
sudo docker run c629b7d70666

Lembra-se de como localizar um contêiner? Veja a seção acima para listá-los.

Parando um contêiner:

Para parar um processo de contêiner em execução:

# Uso: sudo docker stop [ID do contêiner]
sudo docker stop c629b7d70666

Salvando (committing) um contêiner:

Se você quiser salvar o progresso e as alterações que você fez com o contêiner, você pode usar “commit” como explicado acima, para salvá-lo como uma “imagem”.

Este comando transforma seu contêiner em uma *imagem*.

Lembre-se de que com o docker, salvamentos são fáceis e econômicos. Não hesite em criar imagens para salvar seu progresso com um contêiner ou para restaurá-lo quando você precisar (por exemplo, como instantâneos – snapshots – no tempo).

Removendo / Deletando um contêiner

Utilizando o ID de um contêiner, você pode deletá-lo com o rm.

# Uso: sudo docker rm [ID do contêiner]
sudo docker rm c629b7d70666

Você pode aprender mais sobre o Docker lendo sua documentação oficial

**Lembre-se: As coisas estão progredindo muito rapidamente com o Docker. O impulso alimentado pela comunidade é incrível e várias grandes empresas estão tentando juntar-se para oferecer suporte. Contudo, o produto não está rotulado como pronto para produção ou *production ready, *portanto, não recomendado para ser 100% confiável em implantações de missão crítica – *ainda. *Certifique-se de verificar as versões à medida que elas são disponibilizadas e continue mantendo-se por dentro de tudo que acontece no docker.

SQL Injection a little to fear

Article in English
A little about SQL Injection. To know more about this method

SQLi

SQL injection attack consists of insertion or “injection” of a SQL query via the input data from the client to the application. A successful SQL injection exploit can read sensitive data from the database, modify database data (Insert/Update/Delete), execute administration operations on the database (such as shutdown the DBMS), recover the content of a given file present on the DBMS file system and in some cases issue commands to the operating system. SQL injection attacks are a type of injection attack, in which SQL commands are injected into data-plane input in order to effect the execution of predefined SQL commands.
Continue reading

Instalando PHP7 no macOS

Começo este post falando de minha indignação por algo tão insignificante mas que no meu ponto de vista faz diferença. Por que a Apple mudou o nome de OS X derivado do poder do Unix para novamente macOS.

Enfim, vamos ao assunto … a ideia deste post é instalar

brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
brew unlink php56
brew install php70

Pronto PHP 7 instalado e rodando no OSX oppss macOS

Se tiver alguma dúvida a respeito sobre este tema ou qualquer outro pergunte através do Twitter com a hashtag #jaccon

Trocando a porta de envio SMTP no Plesk

Olá pessoal, este post irei mostrar como alterar a porta padrão do servidor de envio do Plesk que vêm configurada para porta 25 que é bloqueada pela maioria dos servidores de e-mail para a porta 587.

A alteração é feita através da linha de comando de uma forma bem simples. Basta executar a linha abaixo

# /usr/local/psa/bin/mailserver –set-message-submission true

Com isto o smtp já estará setado para a porta 587

Fazendo o NGINX voar com NGX_PageSpeed

O NGINX ( Engine X ) é sem dúvida um dos web servers mais optimizados em termos de velocidade de entrega de conteúdo. O módulo NGX PageSpeed dá um gás ainda maior na entrega de conteúdo no web server. Neste artigo irei exemplificar como fazer a instalação do NGX PageSpeed no NGINX.

Principais funcionalidades
HTTPS support with URL control.
Image optimization: stripping meta-data, dynamic resizing, recompression.
CSS and JavaScript minification, concatenation, inlining, and outlining.
Small resource inlining.
Deferring image and JavaScript loading.
HTML rewriting.
Cache lifetime extension.
Allows configuring for multiple servers and many others.

Instalação
Estarei utilizando o Debian 9 para instalar o NGX PageSpeed rodando com um NGIX 1.10.1

Continue reading

CPUStat – Monitoranto utilização de CPU por processo no Linux

O CPUStat é uma ferramenta poderosa de monitoramento de processos de CPU no Linux que foi escrito em GO.

Instalação
A instalação dele é feito através do GO. Execute o seguinte comando abaixo:

# go get github.com/uber-common/cpustat

Utilização
O CPUStat precisa de permissão de super usuário para rodar. Sendo assim utilize o SUDO ouu o próprio root para executar.
Continue reading