Como clonar repositório privado do Github no Docker?

Clonar repositório privado do Github no Docker

O processo de deploy de uma aplicação pode ser feito de várias formas dependendo do ambiente escolhido tanto para o desenvolvimento quanto para a hospedagem final dele. Esse processo pode ser descomplicado com o simples fato de subir o código que está no seu Github direto na imagem docker e continuar com o processo de build e outras tarefas todas por lá, dessa forma tudo já fica bem mais encaminhado para usarmos CD/CI no futuro.

O problema…

Quando estamos lidando com repositórios públicos é bem simples de se fazer. Basta fazer o clone lá no Dockerfile da mesma forma que nós faríamos na nossa estação de desenvolvimento.

Algo como:

...
RUN git clone https://github.com/seu_usuario/seu_repositorio.git
...

Esse processo é simples porque o repositório é público e não precisa de nenhuma autenticação para clona-lo. O que obviamente não acontece no repositório privado.

Para fazer o clone do repositório privado nós precisamos estar autenticados e não seria interessante passarmos as informações de autenticação pela url, isso seria uma falha de segurança seríssima.

Então, para resolver esse problema vamos usar SSH para se autenticar de forma segura e mais elegante 🙂

Autenticando no Github por SSH

Para que o Github possa nos autorizar a fazer a clonagem do repositório na imagem Docker, nós vamos precisar gerar um par de chaves criptografadas na nossa estação de desenvolvimento. Você pode gerar as chaves em todas as máquinas que forem necessárias.

Se você não sabe o que é SSH, aqui vai um link bem completo que vai te ajudar, mas basicamente, usaremos um par de chaves assimétricos de criptografia, nas quais existem uma chave privada, que é sua (da sua máquina em questão) que vamos usar mais pra frente e uma chave pública que você vai configurar lá na sua conta no site do Github em seguida.

Uma coisa importante a saber é que cada par de chaves é único e a autorização é concedida quando a chave pública conseguir “entender” a chave privada que será passada à ela.

Feitas as apresentações, vamos ver como gerar nosso par de chaves SSH.

Verificando as chaves SSH

Antes de sair gerando as chaves, pode ser que você já as tenha gerado antes.

Vale lembrar que todos os procedimentos citados aqui podem ser utilizados em plataformas Microsoft Windows, GNU/Linux e MacOS. Nesse caso estou utilizando um GNU/Linux Ubuntu 20.04.1 LTS

Para verificar se você já possui um par de chaves SSH gerados, digite o seguinte comando no terminal do do seu sistema operacional  ls -al ~/.ssh para ver se existe alguma chave criada.

$ ls -al ~/.ssh
# Lista os arquivos do seu diretório .ssh, se eles existem

Por padrão os arquivos que nos interessam podem ter o nome de id_rsa e extensões .pub

Se você encontrou algum desses arquivos no seu diretório, é provável que possamos usá-los nos passos seguintes ao invés de criar um novo par de chaves.

Se você viu um par de chave pública e privada listado (por exemplo id_rsa.pub and id_rsa) e gostaria de usá-las para conectar com o Github, você pode adicionar sua chave SSH ao SSH-agent e pular o próximo passo da geração de chave do tutorial.

Se mesmo assim você quiser gerar um novo par de chaves não fará mal algum.

Como gerar o par de chaves SSH

Você vai precisar utilizar um pacote específico para gerar o par de chaves SSH. O mais conhecido é o openssh e ele tem versões para os sistemas operaacionais mais utilizados no mercado.

Para gerar o seu par de chaves, vá ao terminal do seu sistema operacional e digite ssh-keygen -t rsa -b 4096 -C “your_email@example.comsubstituindo o email pelo email da sua conta do Github.

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Vai aparecer Enter a file in which to save the key no seu terminal. Você pode aceitar o caminho padrão (/home/seu_usuario/.ssh/id_rsa) pressionando enter ou digitar outro caminho para gerar suas chaves.

Enter a file in which to save the key (/home/you/.ssh/id_rsa): [Press enter]

Caso haja algum arquivo com o mesmo nome no diretório escolhido, será perguntado se você quer substituí-lo.

No próximo passo não informe nenhuma senha no arquivo, caso contrário teremos um erro de chave inválida (invalid key) quando gerarmos nossa imagem Docker.

Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]

Depois disso seu par de chaves assimétricas será gerado. Vamos ver agora como adicioná-las ao seu agente.

Adicionado as chaves ao agente

Nessa etapa você pode adicionar as chaves já existentes ou adicionar as novas chaves geradas na etapa anterior.

Para adicionar as chaves no agente, vamos iniciá-lo em bacakground

$ eval "$(ssh-agent -s)"
Agent pid 43558

e agora adicione sua chave privada no agente. Se você alterou o nome e/ou o diretório da chave, substitua no comando.

$ ssh-add ~/.ssh/id_rsa

Esse procedimento deixa essa chave configurada e pronta para trabalhar em futuros commits e outros comandos, mas não necessariamente é obrigatório para gerarmos a imagem Docker, como vamos ver mais pra frente.

Adicionando a chave pública no Github

Lembra que para que a autenticação ocorra é preciso que as chaves pública e privada “conversem”? Nesse passo damos início á essa “conversa” configurando a chave pública na conta do Github. Para fazer isso, precisamos copiar o conteúdo da chave gerada no seu computador.

Você pode usar o xclip para fazer isso ou simplesmente copiar o arquivo gerado.

$ sudo apt-get install xclip
# Faz o download e instala o xclip. Se você não tem instalado o 'apt-get', você pode usar outro instalador (como o 'yum')$ xclip -sel clip < ~/.ssh/id_rsa.pub
# Copia o conteúdo da sua chave id_rsa.pub

Para usar o arquivo sem xclip

$ cat ~/.ssh/id_rsa.pub

Agora siga os passos para adicionar a chave na sua conta do Github.

  1. Acesse sua conta do Github
  2. Clique na sua foto de perfil no canto superior direito
  3. Clique em “Settings
  4. No menu à esquerda, clique em “SSH and GPG keys
  5. Clique em New SSH Key ou Add SSH key
  6. Adicione uma descrição para a nova chave (Ex.: note-dev)
  7. Cole a chave no campo Key
  8. Clique em Add SSH key
  9. Se for solicitado, confirme sua senha do Github.

Feito isso, vamos configurar nosso Dockerfile

Configurando o Dockerfile

Para configurar o dockerfile, vamos criar uma imagem intermediária para fazer o clone e depois elminá-lá, dando lugar apenas para a imagem definitiva.

# Choose and name our temporary image
FROM alpine as intermediate

# Add metadata identifying these images as our build containers (this will be useful later!)
LABEL stage=intermediate

# Take an SSH key as a build argument.
ARG SSH_PRIVATE_KEY

# Install dependencies required to git clone.
RUN apk update && \
    apk add --update git && \
    apk add --update openssh 

# 1. Create the SSH directory.
# 2. Populate the private key file.
# 3. Set the required permissions.
# 4. Add github to our list of known hosts for ssh.
RUN mkdir -p /root/.ssh/ && \
    echo "$SSH_PRIVATE_KEY" > /root/.ssh/id_rsa && \
    chmod -R 600 /root/.ssh/ && \
    ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts

# Clone a repository (my website in this case)
RUN git clone git@github.com:seu_usuario/seu_repositorio.git

# Choose the base image for our final imageFROM alpine
RUN apk update && \
    apk upgrade && \
    apk add --update nodejs npm && \
    npm install -g @angular/cli

# Copy across the files from our `intermediate` container
RUN mkdir app
COPY --from=intermediate /qualico/. /app/.

WORKDIR /app

Basicamente estamos dizendo apara o dockerfile que vamos informar uma variável $SSH_PRIVATE_KEY na hora de gerar a imagem. Queremos que ele crie uma instância intermediária só para fazer a clonagem do nosso repositório e depois elimine ela e aí sim nós configuramos a imagem definitiva.

Nesse ponto, já configuramos a chave pública na nossa conta do Github, agora chegou a hora de informar a chave privada para autenticação.

Para fazer isso, é preciso carregá-la em uma variável temporária no seu sistema operacional. Faça isso com o seguinte comando.

MY_KEY=$(cat ~/.ssh/id_rsa)

E agora já podemos fazer o build da imagem Docker

docker build --build-arg SSH_PRIVATE_KEY="$MY_KEY" --no-cache --tag clone-example .
…
Successfully tagged clone-example:latest

Nesse ponto já temos a imagem construída com sucesso e podemos fazer o nosso deploy para onde quisermos, mas se você ainda se preocupa com segurança e quer se livrar dos resquícios desse processo, siga em frente com mais alguns passos.

Limpando os vestígios

Mesmo utilizando uma imagem intermediária para dar mais segurança ao processo, se visualizamos os logs das operações, ainda podemos ver nossa chave privada por lá e não queremos isso, não é?

docker history clone-example
> IMAGE               CREATED             CREATED BY                                      SIZE
>b3dbbf389a73        2 minutes ago       /bin/sh -c #(nop) COPY file:90e3ecf812fe16bf…   254B
>39d11e01b3ad        2 minutes ago       /bin/sh -c mkdir files                          0B
>196d12cf6ab1        2 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
><missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:25c10b1d1b41d46a1…   4.41MB

Durante a configuração do Dockerfile utilizamos o comando LABEL onde especificamos o valor de intermediate. Fizemos isso justamente para identificar e facilitar a remoção dos dados sensíveis nessa etapa.

Onde apenas com um comando, vamos remover todos os vestígios da operação, não deixando a sua chave privada exposta.

Para isso, execute o comando:

docker rmi -f $(docker images -q --filter label=stage=intermediate)

Feito pessoas!

Agora seu processo de deploy está mais automatizado e seguro 🙂

Espero ter ajudado!

Grande abraço 🙂

Kaffeine – Como manter seu app sempre online no Heroku?

Logo do Kaffeine

E aí pessoas! Tudo numa boa?

Se você chegou até aqui, provavelmente você já conhece o Heroku e se essa for sua realidade, pode pular esse trecho 🙂

O que é o Heroku?

O Heroku é um serviço de hospedagem de conteúdo, seja um simples site estático ou até mesmo uma aplicação mais complexa, como uma API com acesso a banco de dados e outros recursos por exemplo.

O Heroku é conhecido por ter uma curva de aprendizagem extremamente curta, tornando o deploy da sua aplicação bem simples. Além disso conta com a possibilidade de um plano gratuito (apesar de você ter que deixar o seu cartão de crédito configurado por lá) e também de “incluir” addons para estender os recursos.

Alternativas ao Heroku

Outros players de mercado que concorrem com o Heroku são Amazon AWS, Microsoft Azure, Google Gloud Plataform, Digital Ocean… obviamente cada um tem o seu público-alvo e objetivos diferentes, mas dentre eles, o Heroku parece ser o mais “fácil” de fazer o trabalho com qualidade semelhante.

O problema

Mas, como nem tudo são flores a versão gratuita do Heroku “baixa” a aplicação quando ela não recebe uma requisição por um período de 30 minutos. Em outras palavras, se sua aplicação fica sem nenhum acesso por 30 minutos, ele desliga ela até que alguém a acesse novamente. Quando alguém acessar novamente, ele vai iniciar aplicação toda do zero novamente e o clico se repete. Essa inicialização normalmente é bem domorada e pode causar a percepção de que a sua aplicação é muito lenta aos usuários, quando na verdade é uma característica da sua hospedagem.

Ele faz isso por diversos motivos que a gente não tem certeza, mas talvez a principal delas seja de economizar recursos dos servidores 🙂

Como o Kaffeine resolve esse problema?

O Kaffeine e uma solução gratuita que resolve esse problema. Você simplesmente coloca o endereço da sua aplicação Heroku no site e recebe doses de Kaffeine a cada 30 minutos. Brincadeiras à parte, quando você coloca o endereço da sua aplicação nele, ele passa a fazer requisições a cada 30 minutos à sua aplicação, deixando ele no ar por uma maior parte de tempo.

Mas, como nem tudo são flores (de novo) outra característica da versão gratuita do Heroku é de que esses containers devem parar de funcionar por no mínimo 6 horas por dia e no Kaffeine, você consegue especifica o horário que isso vai acontecer, dessa forma podendo configurar o horário que a sua aplicação receberia menos requisições. Em uma aplicação corporativa por exemplo, provavelmente não haverá acesso fora do horário de expediente ou de madrugada, então você configura o Kaffeine para parar o container nesse período e o impacto nos usuários é menor.

Espero ter ajudado, grande abraço!

Como hospedar seu app sem servidor?

Serverless

Como assim sem servidor? No seu dia-a-dia você vai ver que é isso mesmo, mas na real, nada mudou 🙂

Você já ouviu falar sobre serverless ou FaaS? Então é sobre isso que temos que conversar.

Serverless em tradução livre do inglês seria como “sem servidor”, de fato, o conceito é esse mas também não é bem assim. Na verdade a utilização de uma “arquitetura” serveless apenas “abstrai” a camada de infraestrutura de forma que você não precise se preocupar com isso.

Isso significa que podemos desenvolver um código na nossa máquina e simplesmente dar um deploy para algum player do mercado sem sequer configurar um docker, roteamento, alta disponibilidade, camadas de segurança, etc. Apenas desenvolva seu código e digite no terminal “plataforma_que_eu_escolhi deploy” e pronto! Olha que maravilha!

Tá mas e o FaaS? Essa é a sigla que utilizamos para definir Function As A Service, que pode ser considerado sinônimo de serverless. Os puristas por favor não me xinguem.

Beleza, então meu código tá viajando por aí e eu nem sei onde está? Mais ou menos.

Na verdade, o seu código está em um – ou mais – servidor(es) sim! A jogada aqui é que você não precisa se preocupar com isso, essa é a expertise do player que te fornece o serviço, você não precisa mais ficar dimensionando máquina virtual e configurando o ambiente.

Mas então é uma maravilha só! Vou usar para tudo. Calma! Não é bem assim. Veja abaixo as vantagens, desvantagens e quando usar.

Vantagens

  • Deploy muito prático
  • Setup muito rápido (muito mesmo)
  • Economia de tempo e dor de cabeça com infraestrutura
  • Não importa a quantidade de requisições, o seu serviço não vai “estrangular”

Desvantagens

  • O report de consumo geralmente não é muito claro (normalmente o serviço é cobrado por consumo)
  • Se você não tiver um “stop”, você pode gastar muito dinheiro, inclusive com um bug no código por exemplo
  • É bom que o seu código esteja bem otimizado
  • Não é legal usar para toda e qualquer coisa

Quando usar?

Já tentei usar essa solução de várias formas, certas e erradas (mais erradas do que certas hehe) até encontrar o caminho correto. Não tente subir uma API completa no Firebase Functions por exemplo, não é uma boa solução, não é bom para a sua aplicação e menos ainda para o seu bolso.

As functions são ótimos recursos para hospedar códigos que precisam ser chamados sob demanda para resolver um domínio da aplicação, algo que precise ser chamado, faça o que tenha que fazer e depois termine.

Um exemplo bacana seria: ao fazer o upload de um arquivo de imagem, o usuário envia uma imagem gigantesca para a aplicação, então você chama a sua função hospedada em uma arquitetura serverless e executa toda a otimização dessa imagem para depois armazena-la no bucket e com isso economiza, espaço em disco e grana no bolso, além de garantir o seu padrão da imagem, dimensões, tipo de arquivo, filtro, etc.

Outra aplicação legal é com a utilização de microserviços ao invés de um monolito. Mas isso é um papo para outra jarra de café.

Principais players

E aí, já se animou para testar essa infra? Praticamente todos os players que eu citei te fornecem uma conta gratuita onde você pode se divertir e testar suas aplicações. A experiência é maravilhosa, vai lá!

Em breve eu solto outro post pra te ajudar a fazer isso 😉

Clique em Serverless – Subindo meu código sem servidor (se o título ao lado não estiver com um link, significa que eu ainda não escrevi o post 🙂 )

Obrigado por ter me aturado até aqui e um grande abraço à todos!

Não esqueçam: vamos fazer coisas incríveis!

5 fatos que provam que serverless não é tão caro assim

Gráfico que exibe as vantagens de utilizado serverless em relação ao método tradicional

Se o título atraiu você provavelmente você está familiarizado com o termo serverless, mas para introduzir a galera que caiu de paraquedas por aqui, serverless é uma arquitetura na qual nós “não precisamos” de servidores para hospedar nossos códigos. Nós simplesmente escrevemos os nossos códigos, escolhemos um player do mercado e colocamos o código lá. Depois é só chama-lo e tá feito! Você pode entender melhor sobre serverless nesse artigo que eu escrevi aqui no blog: Como hospedar seu app sem servidor?

Feita a introdução, vamos ao objetivo!

Calcular a execução de uma função na arquitetura serverless pode ser uma tarefa extremamente difícil, isso porque os principais players do mercado estruturaram seu modelo de negócios baseado em tempo de execução dessa função, o que é extremamente justo, mas o valor “pode” ser salgado dependendo de várias variantes.

1 – Tempo de execução

Partindo dessa premissa, você como programador, precisa garantir que o código vai perder menos tempo possível, afinal de contas, mais do que nunca o termo “time is money” se aplica nesse caso.

Muitas tecnologias podem ser adotadas por aqui, algumas bem simples como a utilização de um try/catch na chamada de suas funções ou simplesmente usando uma linguagem de programação compilada como o Go, que faria seu código rodar mais rápido, consumir menos recursos e consequentemente gastar menos dinheiro.

Além das técnicas já citadas não podemos esquecer da utilização do paradigma de desenvolvimento funcional para as linguagens que suportam esse tipo de desenvolvimento com certeza é um ponto para observarmos. Em Javascript por exemplo existe um ganho considerável apenas utilizando as abstrações existentes como map, filter e reduce. Além disso, são essas técnicas que propiciam que softwares de análise de big data como o Apache Hadoop funcionem.

2. Infraestrutra

Não só de máquinas e cabos são feitas as estruturas de uma organização, seja essa estrutura on promisses (instalada localmente na sua empresa) ou na nuvem (cloud computing) precisa de um time para orquestrar todos aqueles servidores que você suou para pagar ou para convencer sua diretoria a pagar.

Por mais que ainda vejamos muitos casos em que empresas ainda utilizem infraestrutura de datacenter local, seja por regras governamentais, seja por necessidade de disponibilidade imediata (altíssima latência), softwares não projetados para escalar em nuvem, ou qualquer outro motivo (eu poderia passar horas por aqui hehe), já sabemos que essa prática é tem um peso muito grande a ser carregado. Máquinas depreciam, tem um custo elevado e normalmente tem capacidade ociosa.

Em se tratando de máquinas, imagine que você tem um software hospedado em nuvem pública em uma máquina virtual. Você tem todos as buzz words de tecnologias configuradas no melhor player do mercado com alta performance e redundância configurados num nível nunca visto antes. Você se sente super feliz com isso! Eu também me sentiria. Entretanto, mesmo que podendo adicionar memória, processamento e disco quando lhe der vontade ou quando a máquina precisar, você não pode adicionar apenas hipotéticos 123 Mhz de processamento, você tem uma quantidade pré-definida pelo seu serviço de hospedagem na qual é possível adicionar, sem contar os reboots que seriam necessários, você certamente está perdendo dinheiro com capacidade ociosa, mesmo que pouca, você está perdendo dinheiro.

Com a utilização de serverless, a sua função é chamada, ele faz o que tem que fazer em um tempo X e te devolve o resultado. Pronto! Usou? Pagou pelo que usou.

Tenho uma longa carreira na área de infraestrutura e sempre foi um desafio propor para a direção o aumento da capacidade computacional do datacenter, isso porque normalmente era visto exatamente dessa forma que eu estou colocando aqui: desperdício de recursos financeiros (apesar de ser cobrado quando a coisa parava heheh) e como exemplo posso citar também a capacidade ociosa que existe, principalmente em estruturas on promisses com máquinas físicas, onde você tem uma máquina que suporta 100 usuários, sua empresa cresce e você tem 110 usuário, você não consegue comprar uma máquina que suporte 10 usuários (e também não faria sentido não ter margens de crescimento nesse paradigma), talvez, você precisará comprar outra(s) máquina(s) que suportem 100 usuários e pagar esse spread ocioso de recursos.

3. Pessoas, mais especificamente: DEVOPs

Não é uma caça as bruxas, nem a extinção desse profissional, muito pelo contrário. Esses caras sempre foram extremamente importantes e são ainda mais hoje em dia.

A questão aqui é que mesmo utilizando tudo em nuvem, se você não tem conhecimento suficiente para orquestrar o ambiente onde roda a sua aplicação, você vai ter que contratar alguém para fazer isso por você, justo! Mas porque ter esse custo e ainda ter todos os custos de ociosidade que eu comentei ali em cima se eu posso não ter?

Cabe ressaltar que dependendo do nível e do tamanho da aplicação é extremamente importante que você estruture e a mantenha com um DEVOP, mesmo utilizando serverless.

4. Performance

Imagine você que em um dia extremamente atípico o seu e-commerce, principal canal de vendas do seu negócio, teve, ao invés dos 5 mil acessos diários, 1 milhão de acessos que repercutiu em vendas e visibilidade para o seu negócio. A sua infraestrutura sem serverless, on promisses ou na nuvem, suportaria essa demanda sem quebrar? Sem ficar lenta ou indisponível? Ora, responde eu mesmo: provavelmente não!

Com o serverless, você com certeza vai pagar por essa demanda (e bastante), mas o seu usuário não será impactado por qualquer um desses fatores, já que estamos falando de players como Amazon Lambda, Microsoft Azure Functions e Google Cloud Functions por exemplo. Acho que temos bastante capacidade computacional com esses caras, certo?

5. Planos gratuitos

Pensando como uma startup todo o centavo é muito importante e se conseguimos economizá-los, isso se reverte em café em cima da mesa, café se transforma e código-fonte e por aí vai…

Brincadeiras à parte, a maioria dos players, grandes ou não, oferecem planos gratuitos, claro que com suas limitações, mas certamente atende as suas demandas de teste, MVP e lançamento do seu produto.

Conclusão

Serverless ainda é caro, complexo de ser medido e provisionado (valores monetários), mas assim como vários outros aspectos da sua startup, precisa ser analisado com atenção, principalmente aos fatores indiretos ligados a sua implementação. Também é necessário ficar atento à operação continuada e entender o momento certo de migração, caso necessário. Isso pode ser um fator muito importante dentro da sua organização.

Eu uso serverless como premissa da minha estrutura e você?

Gostou do artigo? Consegui agregar valor para você? Se sim, indique para um amigo para que ele também fique esperto no assunto.

Obrigado por vir até aqui.

Vamos fazer coisas incríveis hoje?

Como remover a senha de uma planilha do Excel xlsx

E aí galera do café, tranquilo?

Post rápido para salvar aquela planilha com a senha perdida 😉

Aproveitem!

 

Este método somente aplica-se a planilhas protegidas por senha. Se o arquivo está protegido com o recurso “Encriptar com uma senha”, ele não funcionará.

  1. Abra o Windows Explorer e habilite a exibição de extensão de arquivos conhecidas. Para isso, pressione a tecla para exibir os menus superiores e entre no menu Ferramenta > Opções de pasta
    Na aba Modo de Exibição, desmarque a caixa Ocultar a extensão dos tipos de arquivo conhecidos e clique em OK.
  2. Altere a extensão do arquivo de .XLSX para .ZIP
  3. Extraia o arquivo para um diretório com o seu extrator favorito (Winzip, 7-zip, tar, etc)
  4. Entre no subdiretório xl e depois em worksheet que você acabou de extrair
    Deverá ter um ou mais arquivos com nomes como: sheet1.xml (sheet2.xml, etc. Eles representam as planilhas que você tem no seu arquivo.
  5. Dentro de cada um destes arquivos terá uma tag XML: <sheetProtection password=… />. Delete esta tag XML inteira usando um editor de texto (como o Bloco de notas, Visual Studio Code, etc).
  6. Re-zip os arquivos novamente.
  7. Renomeie o arquivo de .ZIP para .XLSX

E era isso!
Escrevam aí como foi a experiência de vocês com esse método…

Grande abraço!

Fonte

How to unprotect a password protected .XLSX file – Adam’s Code Blog – http://blog.bitcollectors.com/adam/2011/10/how-to-unprotect-a-password-protected-xlsx-file/

Ocorreu um erro interno no SEFIP. Se o erro persistir reinstale o SEFIP. Como resolver?

Erro SEFIP

Olá!

Se você está tendo esse erro ao abrir o programa SEFIP no Microsoft Windows 10, eu encontrei a solução! 🙂

E ela é bem simples! Basta que você defina a impressora “Microsoft to PDF” como impressora padrão do seu sistema operacional.

Isso acontece porque o programa utiliza essa impressora virtual para gerar os relatórios em PDF e se ela não for a padrão ele nãos abe onde encontrar e dá o famigerado erro!

Conte aí nos comentários as respostas do suporte da Caixa referente à esse erro. Aqui na empresa escalaram o chamado e mandaram formatar a estação de trabalho hehehe

Grande abraço.

Espero ter ajudado e bom trabalho pra nós!

 

Erro re0: Watchdog timeout no PfSense

Introdução

E aí galerinha do café!

Hoje tive que trocar o firewall do cliente de local físico e ao reconectar os cabos de rede, me deparei com esse erro re0: Watchdog timeout. No meu caso a re0 é a interface WAN e a configuração é obtida pelo DCHP da operadora de internet. Se eu conectasse o cabo depois do boot completo do servidor, ele apresentava o erro e travava e se eu ligasse o servidor com o cabo já conectado, ele travava ao obter o endereço IP da WAN.

Configurações

PfSense: 2.3.5 x86
re0: WAN DHCP

O Watchdog

Pra quem não conhece, o whatchdog é um “serviço” muito conhecido em eletrônica e semelhante á handler de eventos em programação. Ele fica monitorando, nesse caso, a porta por novas conexões físicas e a partir de uma conexão ele toma as decisões impostas à ele pela fabricante da placa de rede.

Solução simplificada

Apenas adicione as seguintes linhas no /boot/loader.conf

hw.re.msi_disable=1
hw.pci.enable_msix=0
hw.pci.enable_msi=0

Solução detalhada

  1. Inicie o servidor PfSense sem o cabo conectado e deixe ele completar o boot.
  2. Selecione a opção 8 (Shell)
  3. Digite o comando “vi /boot/loader.conf”
  4. Pressione a tecla “a”
  5. Digite as linhas
    hw.re.msi_disable=1
    hw.pci.enable_msix=0
    hw.pci.enable_msi=0
  6. Pressione a tecla “ESC” + “:” + “x” para salvar e fechar o arquivo
  7. Pressione a tecla “Enter
  8. Plugue o cabo

Observação: eu ainda tive que forçar a obtenção do IP via DHCP na re0

Espero ter ajudado!

Grande abraço.

Como facilitar a identificação de problemas no Windows com a ferramenta PSR

Olá!

As vezes é um pouco difícil de você identificar aquele erro ou problema que o seu usuário está te informando. Vem uns prints dentro de arquivos do Word ou soltos mesmo e tu fica meio sem entender.

Para resolver isso existe uma ferramenta disponível no Windows, a partir da versão 7 que vai resolver por completo esse dilema.

Trata-se da PSR (Problem Steps Recorder) gravador de passos para reproduzir problema.

Para utilizar é muito fácil, basta seguir os passos abaixo:

1º passo – Clique no menu INICIAR

2º passo – Clique em EXECUTAR

3º passo – Digite “psr” (sem aspas)

4º passo – Clique em INICIAR GRAVAÇÃO

Ferramenta de auxílio ao suporte PSR

5º passo – Execute normalmente o procedimento que deverá ser informado à quem está te prestando suporte

Obs.: durante a execução é possível adicionar comentários para explicar melhor alguma tarefa.

6º passo – Clique em PARAR GRAVAÇÃO

7º passo – Na janela com o relátório, clique em SALVAR, escolha um diretório, salve o arquivo .Zip e encaminhe para quem está lhe ajudando.

Pronto! Tudo ficou mais claro 😉

Espero ter ajudado, grande abraço à todos!

Licenciamento de Oracle Database: Virtualizar ou não?

Logotipo Oracle

Introdução

Estou liderando um projeto relativamente de grande porte na empresa em que trabalho. O desafio dessa vez é levar o ambiente para um datacenter aqui da cidade (Porto Alegre) ou melhorar as nossas dependências a fim de fornecer a segurança física necessária contra desastres, entretanto, havia a cerca de 3 anos outro projeto parado que o assunto era a criação de uma “nuvem privada”, somei os projetos e estou por aqui ficando quase de cabelo branco… (hehe).

No decorrer desse projeto, me deparei com a seguinte situação, virtualizar ou não virtualizar a minha instância de banco de dados?

No nosso caso utilizamos o Oracle como banco de dados principal na empresa. Nele temos nosso ERP, GED e CRM, além dele temos outros bancos de dados menores para outras tarefas, como intranet por exemplo, mas vamos nos ater ao Oracle.

Quando pensei em virtualizar, logo fui consultar o EULA da Oracle (como de praxe) para ver como ficariam as licenças para esse servidor. Entre diversos EULA’s, conversas com amigos, consultores, fornecedores e DBA’s, pude juntar as informações que forneço para vocês abaixo.

Importante: Não se baseie somente nessas informações, eu não trabalho para a Oracle, não sou certificado Oracle (ainda hehe) e essas informações servem somente como conhecimento e não como documento. Fiquem atentos as versões dos EULA’s fornecidos diretamente no site da fabricante do software. Não me responsabilizo por qualquer ação tomada com base nesse artigo.

Particionamento de servidor

A Oracle considera duas formas de “particionar” um servidor, são elas: soft partition e hard partition.

Abaixo algumas considerações sobre ambas.

Soft Partition

Soft partition é quando fazemos o particionamento em um hypervisor (VMWare, Citrix XenServer, Microsoft Hyper-V, etc). Quando configuramos a VM com um processador apenas.

Essa modalidade NÃO É ACEITA para o cálculo de número de processadores para aquisição de licenças Oracle.

Obs.: caso a virtualização seja feita sob o hypervisor da Oracle, o Oracle VM, existe outro documento permitindo contabilizar somente o processador da VM para licenciamento.

Hard Partition

Hard partition é quando conseguimos realmente especificar o hardware que será utilizado pelo sistema operacional. Essa modalidade sim é aceita pela Oracle como cálculo de numero de processadores para aquisição de licenças Oracle.

Entretanto, nas arquiteturas Intel x86 e x86_64 não são possíveis fazer hard partition, os SO’s não são preparados para isso, somente em arquiteturas RISC, como é o caso de Power (PPC) da IBM por exemplo.

Dessa forma é possível “informar” para o SO quanto de recurso físico ele vai utilizar, independentemente da máquina possuir no total dois processadores, por exemplo.

Licenças Oracle Database Standard Edition One e Oracle Database Standard Edition

A Oracle possui muitas outras licenças e formas de licenciamento, entretanto vou comentar apenas essas duas licenças de processador, as quais eu estudei para a implementação desse projeto.

Obs.: essas licenças podem ser pagas anualmente ou na forma perpétua.

Obs. 1: o valor do suporte anual é de 20% do valor das licenças, é preciso pagar para quantidade total de processadores que você tem e é muito importante que você tenha o suporte atualizado, caso contrário não terá direito de baixar pacotes de atualização do seu software e não terá suporte pela Oracle quando for necessário (geralmente quando chega a esse ponto é porque a coisa está muito, mas muito feia…). Outro motivo é que você paga retroativo, caso pule um ano, por exemplo (isso pode onerar o orçamento do seu departamento de TI e seu gestor certamente não vai gostar).

Considerações sobre Oracle Database Stanadard Edition One

Nessa edição, podemos licenciar equipamentos com até 2 processadores físicos. FIQUEM ATENTOS ENTRETANTO, que mesmo que a licença permita que sejam licenciados até dois processadores, não significa que uma máquina com dois processadores necessitará apenas de uma licença, pelo contrário, significa que caso tenha mais do que 2 processadores, deverá ser usada outro tipo de licença, falaremos disso mais adiante.

Além disso, esse licenciamento custa o equivalente a metade do valor da versão Standard (em 2013) e não possui direitos de uso de Oracle RAC (Real Application Cluster – Consiste basicamente em um conjunto de serviços de alta disponibilidade).

Exemplificando:

Exemplo 1: Um servidor com dois processadores físicos deverá utilizar duas licenças Oracle Database Standard Edition One.

Exemplo 2: Um servidor com quatro processadores físicos deverá utilizar outro tipo de licenciamento.

Exemplo 3: Um servidor com mais de quatro processarores físicos deverá utilizar um tipo de licenciamento diferente do comentado no Exemplo 2 (esse não será comentado nesse artigo).

Considerações sobre Oracle Database Stanadard Edition

Nessa versão, podemos utilizar em equipamentos com até 4 processadores físicos e o mesmo comentado na versão anterior vale para cá.

Essa versão é bem cara e contempla a utilização do Oracle RAC.

Obs.: Ainda existe a versão Enterprise para equipamentos com mais de 4 processadores, que possui um algoritmo de cálculo baseado no total dos cores dos processadores físicos multiplicado por 0,5, mas não vou comentar nada além disso nesse artigo, pois não estudei muito a fundo… além disso, dependendo do tamanho da empresa (quantidade de usuários, se está virtualizado ou não, falaremos mais adiante).

 

Considerações sobre utilização de virtualização

 

As formas de licenciamento supracitadas servem tanto para ambientes virtuais como físicos, entretanto devemos observar alguns pontos além dos já citados em ambientes virtuais. São eles:

Suporte

No projeto inicial iríamos virtualizar a instância de banco de dados sob o Microsoft Windows Server 2012 Hyper-V, entretanto um ponto levantado foi fortemente considerado. A Oracle “não presta suporte” á ambientes que não estão virtualizados com Oracle VM (até então). Na verdade, eles não vão deixar de te atender, mas vão te mandar simular o erro que está ocorrendo em uma máquina física (caso o erro ainda não esteja relatado), aí já viu que a dor de cabeça vira enxaqueca rapidinho…

Utilização de V-motion

Todos os hypervisors tem a possibilidade de v-motion (mover máquinas virtuais dentro de um grupo [pool] de servidores) que é uma ferramenta de excelente aplicabilidade em qualquer ambiente, principalmente quando utilizado com HA (High Available, alta disponibilidade).

Com a utilização desse serviço, a sua VM com a instância Oracle passará por diversos equipamentos e a política da Oracle é clara quanto à isso: toda a máquina que rodar o produto deverá ser licenciada. Portanto, se você tem um pool com 4 máquinas físicas por onde essa VM poderá passar por V-motion, você terá que licenciar todas as máquinas do pool.

Oracle VM

Conforme já citado, a Oracle tem um documento específico para o licenciamento sob Oracle VM, nesse caso é contato apenas o processador da máquina virtual em que está instalado o banco de dados.

Obs.: até então o Oracle VM não faz motion de storage, entretanto, isso não é um impecílio, o próprio storage tem tecnologia suficiente para suprir essa necessidade.

Conclusão

Conforme o estudo realizado sob as licenças Oracle, tive que alterar parte considerável do escopo do projeto inicial, inclusive os custos do projeto.

No meu caso, optei por não virtualizar, apenas utilizar uma máquina (host) específica para esse serviço, mas cada ambiente é um organismo e precisa ser avaliado de perto.

Essas são algumas considerações que eu tive para o meu projeto, mas não tome como documento, pergunte e informe-se em fontes garantidas, como o site da fabricante.

Você também pode contribuir para a comunidade. Tem alguma sugestão ou correção? Descreva nos comentários.

 

E você o que usou ou usaria em seu ambiente?

Descobrindo SERVICE TAG da Dell por WMI

Post rápido…

Para descobrir o service tag (etiqueta de serviço) de um equipamento Dell remotamente, além do outro post que fala de um script VBS, podes executar o seguinte comando:

c:\ wmic /user:[usuario] /password:[senha] /node:[máquina] systemenclosure get serialnumber

Onde:

[usuario] = é um usuário que vai conectar no computador remoto (se omitido será solicitado em tempo de execução)
[senha] = é a senha desse usuário (se omitido será solicitado em tempo de execução)
[máquina] = Nome NETBIOS ou endereço IP do equipamento. Se o nome conter espaços coloque-o entre aspas duplas (“”).

O resultado será algo como:

SeriaNumber
J6FFD1

DICA: o equipamento pode não ser Dell e possuir um serial number de outro fabricante.

Vou voltar para a minha correria, grande abraço!