<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DevOps, Linux e mais</title><link>https://blog.chcdc.com.br/</link><description>Recent content on DevOps, Linux e mais</description><generator>Hugo -- gohugo.io</generator><language>pt_br</language><lastBuildDate>Wed, 11 Feb 2026 21:55:00 -0300</lastBuildDate><atom:link href="https://blog.chcdc.com.br/index.xml" rel="self" type="application/rss+xml"/><item><title>Monitorando Sites com Go: Criando seu Próprio Health Check CLI</title><link>https://blog.chcdc.com.br/posts/monitorando-sites-com-go-criando-seu-pr%C3%B3prio-health-check-cli/</link><pubDate>Wed, 11 Feb 2026 21:55:00 -0300</pubDate><guid>https://blog.chcdc.com.br/posts/monitorando-sites-com-go-criando-seu-pr%C3%B3prio-health-check-cli/</guid><description>&lt;p&gt;Se você precisa verificar se um endpoint interno, uma API ou um site está no ar, você tem duas opções: configurar um Zabbix/Prometheus da vida (o que pode ser um canhão para matar uma mosca) ou rodar um script rápido.&lt;/p&gt;
&lt;p&gt;Hoje nós vamos seguir o caminho de criar um script rapido utilizando &lt;strong&gt;Go&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Vamos construir um CLI que recebe uma lista de URLs e nos diz o status e o tempo de resposta de cada uma.&lt;/p&gt;</description></item><item><title>Controlando onde seus pods rodam juntos com affinity e anti-affinity</title><link>https://blog.chcdc.com.br/posts/controlando-onde-seus-pods-rodam-juntos-com-affinity-e-anti-affinity/</link><pubDate>Mon, 09 Feb 2026 22:05:00 -0300</pubDate><guid>https://blog.chcdc.com.br/posts/controlando-onde-seus-pods-rodam-juntos-com-affinity-e-anti-affinity/</guid><description>&lt;p&gt;Neste post, vamos configurar regras para controlar exatamente onde nossos pods devem rodar, garantindo alta disponibilidade e performance.&lt;/p&gt;
&lt;h2 id="vamos-entender-os-conceitos"&gt;Vamos entender os conceitos&lt;/h2&gt;
&lt;p&gt;A ideia é simples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;node affinity&lt;/strong&gt; = controlamos em &lt;strong&gt;qual nó&lt;/strong&gt; o pod roda (hardware, zona)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pod affinity&lt;/strong&gt; = colocamos pods &lt;strong&gt;próximos&lt;/strong&gt; de outros pods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pod anti-affinity&lt;/strong&gt; = colocamos pods &lt;strong&gt;longe&lt;/strong&gt; de outros pods&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="required-vs-preferred"&gt;required vs preferred&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;required&lt;/strong&gt;: pod NÃO escala se regra não for atendida (use com cautela)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;preferred&lt;/strong&gt;: scheduler tenta atender mas escala mesmo se não conseguir&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Dica&lt;/strong&gt;: sempre comece com &lt;code&gt;preferred&lt;/code&gt; e mude para &lt;code&gt;required&lt;/code&gt; apenas se necessário.&lt;/p&gt;</description></item><item><title>Docker: reduzindo imagem de 1GB para 50MB na prática</title><link>https://blog.chcdc.com.br/posts/docker-reduzindo-imagem-de-1gb-para-50mb-na-pr%C3%A1tica/</link><pubDate>Mon, 02 Feb 2026 23:42:00 -0300</pubDate><guid>https://blog.chcdc.com.br/posts/docker-reduzindo-imagem-de-1gb-para-50mb-na-pr%C3%A1tica/</guid><description>&lt;p&gt;Imagem Docker de 1GB? Deploy demorando 10 minutos? Vamos resolver isso.&lt;/p&gt;
&lt;p&gt;O primeiro passo é entender exatamente o que está deixando sua imagem gigante. Antes de otimizar, precisamos diagnosticar o problema:&lt;/p&gt;
&lt;h2 id="diagnóstico-rápido"&gt;Diagnóstico rápido&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Ver tamanho das imagens&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker images --format &lt;span class="s2"&gt;&amp;#34;table {{.Repository}}\t{{.Size}}\t{{.Tag}}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Ver layers da imagem&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ docker &lt;span class="nb"&gt;history&lt;/span&gt; &amp;lt;imagem&amp;gt;:tag
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="problemas-comuns-que-deixam-imagem-gigante"&gt;Problemas comuns que deixam imagem gigante&lt;/h2&gt;
&lt;h3 id="1-usar-imagem-base-ubuntudebian"&gt;1) Usar imagem base Ubuntu/Debian&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-dockerfile" data-lang="dockerfile"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# NÃO FAÇA ISSO&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;ubuntu:22.04&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;RUN&lt;/span&gt; apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get install -y nodejs npm&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Resultado&lt;/strong&gt;: ~800MB só do base&lt;/p&gt;</description></item><item><title>Debugando rollout no Kubernetes</title><link>https://blog.chcdc.com.br/posts/debugando-rollout-no-kubernetes/</link><pubDate>Thu, 29 Jan 2026 12:14:00 -0300</pubDate><guid>https://blog.chcdc.com.br/posts/debugando-rollout-no-kubernetes/</guid><description>&lt;p&gt;Se o seu rollout está &lt;strong&gt;lento&lt;/strong&gt; ou apresentando problemas, geralmente está na configuração de &lt;code&gt;maxSurge&lt;/code&gt;/&lt;code&gt;maxUnavailable&lt;/code&gt; ou na quantidade de réplicas.&lt;/p&gt;
&lt;p&gt;A ideia é simples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;maxSurge&lt;/code&gt;: quantos pods &lt;strong&gt;extras&lt;/strong&gt; podem ser criados durante o rollout&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxUnavailable&lt;/code&gt;: quantos pods &lt;strong&gt;podem ficar indisponíveis&lt;/strong&gt; durante o rollout&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="checklist-rápido-que-uso-diariamente"&gt;Checklist rápido que uso diariamente&lt;/h2&gt;
&lt;h3 id="1-verificar-status-do-rollout"&gt;1) Verificar status do rollout&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl rollout status deploy/&amp;lt;app&amp;gt; -n &amp;lt;ns&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl rollout &lt;span class="nb"&gt;history&lt;/span&gt; deploy/&amp;lt;app&amp;gt; -n &amp;lt;ns&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-olhar-events-recentes"&gt;2) Olhar events recentes&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl get events -n &amp;lt;ns&amp;gt; --sort-by&lt;span class="o"&gt;=&lt;/span&gt;.lastTimestamp &lt;span class="p"&gt;|&lt;/span&gt; tail -n &lt;span class="m"&gt;30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Procure por &lt;code&gt;FailedScheduling&lt;/code&gt;, &lt;code&gt;ReplicaSet&lt;/code&gt;, &lt;code&gt;Available&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Kubernetes requests vs limits: como isso afeta scheduling e throttling</title><link>https://blog.chcdc.com.br/posts/kubernetes-requests-vs-limits-como-isso-afeta-scheduling-e-throttling/</link><pubDate>Wed, 28 Jan 2026 08:08:00 -0300</pubDate><guid>https://blog.chcdc.com.br/posts/kubernetes-requests-vs-limits-como-isso-afeta-scheduling-e-throttling/</guid><description>&lt;p&gt;Muitas vezes o pod esta sendo morto por OOM ou a aplicação fica lenta por conta de falta de recursos.
Isso geralmente acontece por conta de &lt;code&gt;requests&lt;/code&gt;/&lt;code&gt;limits&lt;/code&gt; mal configurados.&lt;/p&gt;
&lt;p&gt;A ideia é simples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;requests&lt;/code&gt; = &lt;strong&gt;reserva&lt;/strong&gt; que o scheduler usa pra decidir onde alocar&lt;/li&gt;
&lt;li&gt;&lt;code&gt;limits&lt;/code&gt; = &lt;strong&gt;teto&lt;/strong&gt; que o container não pode passar&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="classes-de-qos-o-que-o-k8s-usa-internamente"&gt;Classes de QoS (o que o K8s usa internamente)&lt;/h2&gt;
&lt;h3 id="guaranteed-requests--limits"&gt;Guaranteed (requests == limits)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Garantia de recursos&lt;/li&gt;
&lt;li&gt;Não sofre limitação de CPU&lt;/li&gt;
&lt;li&gt;Se estourar memória, OOMKill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Critérios&lt;/strong&gt;: todos os containers devem ter requests == limits para CPU e memory&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="burstable-requests--limits"&gt;Burstable (requests &amp;lt; limits)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Pode ser &amp;ldquo;preemptado&amp;rdquo; por pods Guaranteed&lt;/li&gt;
&lt;li&gt;CPU pode ser limitada se o nó estiver lotado&lt;/li&gt;
&lt;li&gt;Memória: OOM se passar do limit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Critérios&lt;/strong&gt;: pelo menos um container com request ou limit (mas não todos iguais)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="besteffort-sem-requestslimits"&gt;BestEffort (sem requests/limits)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Primeiro a ser &amp;ldquo;preemptado&amp;rdquo; se o nó precisar de recursos&lt;/li&gt;
&lt;li&gt;CPU pode ser quase zero se o nó estiver sob pressão&lt;/li&gt;
&lt;li&gt;OOMKill se o nó precisar de memória&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Critérios&lt;/strong&gt;: nenhum container com requests ou limits&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="troubleshooting-do-dia-a-dia"&gt;Troubleshooting do dia a dia&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl top pod -A
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe pod -n &amp;lt;ns&amp;gt; &amp;lt;pod&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl describe node &amp;lt;node&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get events -n &amp;lt;ns&amp;gt; --sort-by&lt;span class="o"&gt;=&lt;/span&gt;.lastTimestamp &lt;span class="p"&gt;|&lt;/span&gt; tail -n &lt;span class="m"&gt;30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Procure por:&lt;/p&gt;</description></item><item><title>Kubernetes probes: liveness, readiness e startup</title><link>https://blog.chcdc.com.br/posts/kubernetes-probes-liveness-readiness-e-startup/</link><pubDate>Mon, 26 Jan 2026 21:27:00 -0300</pubDate><guid>https://blog.chcdc.com.br/posts/kubernetes-probes-liveness-readiness-e-startup/</guid><description>&lt;p&gt;Se seu rollout derruba tráfego, ou seu pod entra em &lt;strong&gt;restart loop&lt;/strong&gt;, tem uma boa chance do problema estar em &lt;em&gt;probe&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;A ideia é simples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;readinessProbe&lt;/code&gt; decide se o pod &lt;strong&gt;pode receber tráfego&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;livenessProbe&lt;/code&gt; decide se o container &lt;strong&gt;deve ser reiniciado&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;startupProbe&lt;/code&gt; dá &lt;strong&gt;tempo de boot&lt;/strong&gt; para apps lentas sem matar o pod antes da hora&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="quando-usar-cada-uma"&gt;Quando usar cada uma&lt;/h2&gt;
&lt;h3 id="readinessprobe-tráfego"&gt;readinessProbe (tráfego)&lt;/h3&gt;
&lt;p&gt;Use quando:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;seu app precisa de alguns segundos pra ficar pronto&lt;/li&gt;
&lt;li&gt;você tem dependência externa (DB, cache, migrations) e quer segurar tráfego&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se ela falhar:&lt;/p&gt;</description></item><item><title>Estratégias de deployment em produção: blue-green, canary e rolling updates</title><link>https://blog.chcdc.com.br/posts/estrat%C3%A9gias-de-deployment-em-produ%C3%A7%C3%A3o-blue-green-canary-e-rolling-updates/</link><pubDate>Sun, 25 Jan 2026 22:17:39 -0300</pubDate><guid>https://blog.chcdc.com.br/posts/estrat%C3%A9gias-de-deployment-em-produ%C3%A7%C3%A3o-blue-green-canary-e-rolling-updates/</guid><description>&lt;p&gt;Garantir a entrega de novas versões sem impactar usuários é um desafio crítico em DevOps. Diferentes contextos de negócio e infraestrutura exigem abordagens distintas.
Neste post, você vai entender três estratégias fundamentais de deployment e quando aplicar cada uma.&lt;/p&gt;
&lt;h2 id="compreendendo-o-espectro-de-risco"&gt;Compreendendo o Espectro de Risco&lt;/h2&gt;
&lt;p&gt;A decisão sobre qual estratégia adotar tem implicações diretas em:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RTO (Recovery Time Objective)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RPO (Recovery Point Objective)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Impacto potencial em usuários&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Na prática, cada abordagem fica em um ponto diferente no espectro entre velocidade de atualização e segurança operacional.&lt;/p&gt;</description></item><item><title>journalctl: dicas práticas para investigar serviços no Linux</title><link>https://blog.chcdc.com.br/posts/journalctl-dicas-pr%C3%A1ticas-para-investigar-servi%C3%A7os-no-linux/</link><pubDate>Sat, 01 Nov 2025 13:28:30 -0300</pubDate><guid>https://blog.chcdc.com.br/posts/journalctl-dicas-pr%C3%A1ticas-para-investigar-servi%C3%A7os-no-linux/</guid><description>&lt;p&gt;Na hora que um serviço cai em produção, quase sempre você vai parar no &lt;code&gt;journalctl&lt;/code&gt;.
Neste post vou deixar um conjunto de comandos que eu uso no dia a dia para &lt;strong&gt;achar erro rápido&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="ver-logs-de-um-serviço-unit"&gt;Ver logs de um serviço (unit)&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo journalctl -u nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Com saída mais “enxuta”:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo journalctl -u nginx --no-pager
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="seguir-logs-em-tempo-real-tipo-tail--f"&gt;Seguir logs em tempo real (tipo tail -f)&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo journalctl -u nginx -f
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="filtrar-por-período"&gt;Filtrar por período&lt;/h2&gt;
&lt;p&gt;Última hora:&lt;/p&gt;</description></item><item><title>Cron ou systemd timers? (na prática)</title><link>https://blog.chcdc.com.br/posts/cron-ou-systemd-timers-na-pr%C3%A1tica/</link><pubDate>Sat, 19 Apr 2025 22:12:00 -0300</pubDate><guid>https://blog.chcdc.com.br/posts/cron-ou-systemd-timers-na-pr%C3%A1tica/</guid><description>&lt;p&gt;Se você mantém servidores Linux há algum tempo, cedo ou tarde vai cair nessa dúvida: &lt;strong&gt;continuo no cron&lt;/strong&gt; ou &lt;strong&gt;migro para systemd timers&lt;/strong&gt;?&lt;/p&gt;
&lt;p&gt;A resposta curta: os dois funcionam. Mas o &lt;code&gt;systemd&lt;/code&gt; te dá algumas vantagens bem úteis no dia a dia.&lt;/p&gt;
&lt;h2 id="quando-o-cron-ainda-faz-sentido"&gt;Quando o cron ainda faz sentido&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tarefa simples&lt;/strong&gt; (um comando pequeno, sem dependências)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compatibilidade&lt;/strong&gt;: praticamente todo Linux tem cron&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Você só quer agendar e pronto&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Exemplo clássico:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# todo dia às 03:00&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; * * * /usr/local/bin/backup.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="o-que-o-systemd-timers-resolve-melhor"&gt;O que o systemd timers resolve melhor&lt;/h2&gt;
&lt;h3 id="persistência-e-quando-a-máquina-estava-desligada"&gt;Persistência (e quando a máquina estava desligada)&lt;/h3&gt;
&lt;p&gt;Com cron, se o servidor estava off no horário, &lt;strong&gt;perdeu&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Automação de infraestrutura dinamica utilizando Ansible</title><link>https://blog.chcdc.com.br/posts/automa%C3%A7%C3%A3o-de-infraestrutura-dinamica-utilizando-ansible/</link><pubDate>Mon, 14 Apr 2025 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/automa%C3%A7%C3%A3o-de-infraestrutura-dinamica-utilizando-ansible/</guid><description>&lt;p&gt;O inventário dinâmico do Ansible é uma forma que permite que o Ansible descubra e gerencie automaticamente hosts em ambientes dinâmicos, como a AWS, sem a necessidade de manter arquivos de inventário estáticos.&lt;/p&gt;
&lt;h4 id="como-funciona"&gt;Como funciona&lt;/h4&gt;
&lt;p&gt;O Ansible consulta a API da AWS em tempo real para obter informações atualizadas sobre instâncias EC2 e outros recursos, refletindo imediatamente qualquer alteração na infraestrutura, como criação, remoção ou alteração de instância&lt;/p&gt;
&lt;p&gt;O plugin também retornará instâncias que foram criadas fora do Ansible e permitirá que o Ansible as gerencie.&lt;/p&gt;</description></item><item><title>Como criar e remover rotulos em partições ou volumes de disco no Linux</title><link>https://blog.chcdc.com.br/posts/como-criar-e-remover-rotulos-em-parti%C3%A7%C3%B5es-ou-volumes-de-disco-no-linux/</link><pubDate>Mon, 29 Jul 2024 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/como-criar-e-remover-rotulos-em-parti%C3%A7%C3%B5es-ou-volumes-de-disco-no-linux/</guid><description>&lt;p&gt;O objetivo aqui é mostrar como criar rotulos(labels) em um disco rigido no Linux.&lt;/p&gt;
&lt;p&gt;Criar rotulos no disco rigido dá ao usuário uma melhor forma de organizar todos os dispositivos no seu sistema.&lt;/p&gt;
&lt;p&gt;A ferramenta que vamos utilizar para essa tarefa é o e2label.&lt;/p&gt;
&lt;h3 id="como-as-coisas-funcionam"&gt;Como as coisas funcionam&lt;/h3&gt;
&lt;p&gt;Em um sistema Linux, as partições de disco recebem um nome de dispositivo como /dev/sda, /dev/sdb, /dev/sda5, etc. Basicamente, sdX (com X sendo alguma letra) e, às vezes, um número no final.&lt;/p&gt;</description></item><item><title>Conhecendo TMUX - Comandos Básicos</title><link>https://blog.chcdc.com.br/posts/conhecendo-tmux-comandos-b%C3%A1sicos/</link><pubDate>Mon, 16 Jan 2023 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/conhecendo-tmux-comandos-b%C3%A1sicos/</guid><description>&lt;p&gt;Tmux é um multiplexador do terminal, uma alternativa ao GNU Screen. Em outras palavras, isso significa que voce pode iniciar uma sessão e abrir multiplas janelas dentro de cada sessão.&lt;/p&gt;
&lt;p&gt;Sessões utilizando o Tmux são persistentes, isso significa que aplicações podem continuar rodando caso voce seja desconectado.&lt;/p&gt;
&lt;p&gt;Todos os comandos em Tmux iniciam com um prefixo, por padrão é &lt;code&gt;ctrl+b&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="instalando-tmux"&gt;Instalando Tmux&lt;/h3&gt;
&lt;p&gt;Você pode instalar usando o gerenciador de pacotes da sua distro&lt;/p&gt;</description></item><item><title>Gerando senhas seguras com bash puro e openssl no Linux</title><link>https://blog.chcdc.com.br/posts/gerando-senhas-seguras-com-bash-puro-e-openssl-no-linux/</link><pubDate>Fri, 02 Sep 2022 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/gerando-senhas-seguras-com-bash-puro-e-openssl-no-linux/</guid><description>&lt;p&gt;Nesse &lt;a href="https://blog.chcdc.com.br/posts/como-gerar-senhas-seguras-com-pwgen/"&gt;post sobre pwgen&lt;/a&gt; mostrei como gerar senhas via CLI usando uma ferramenta externa. Porém, muitas vezes estamos em ambientes onde não é possível ou viável instalar aplicações externas, seja por restrições de segurança ou limitações do ambiente.&lt;/p&gt;
&lt;p&gt;Nesses casos, o melhor caminho é utilizar as ferramentas nativas disponíveis no servidor. Vamos explorar duas opções: &lt;strong&gt;OpenSSL&lt;/strong&gt; e &lt;strong&gt;Bash puro&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="openssl"&gt;OpenSSL&lt;/h2&gt;
&lt;p&gt;O OpenSSL é uma biblioteca de software de código aberto que implementa os protocolos de segurança SSL (Secure Sockets Layer) e TLS (Transport Layer Security). Está presente na maioria das distribuições Linux e é uma excelente opção para gerar dados aleatórios criptograficamente seguros.&lt;/p&gt;</description></item><item><title>SystemD - Criando e Gerenciando Serviços no Linux</title><link>https://blog.chcdc.com.br/posts/systemd-criando-e-gerenciando-servi%C3%A7os-no-linux/</link><pubDate>Sun, 07 Aug 2022 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/systemd-criando-e-gerenciando-servi%C3%A7os-no-linux/</guid><description>&lt;p&gt;O systemd é o sistema de inicialização e gerenciamento de serviços padrão na maioria das distribuições Linux modernas. Ele substituiu o antigo SysVinit e oferece recursos avançados como paralelização de inicialização, gerenciamento de dependências, controle de recursos e logging integrado.&lt;/p&gt;
&lt;p&gt;Neste post, vamos aprender a criar e gerenciar serviços usando systemd, desde a criação de unit files até o troubleshooting de problemas.&lt;/p&gt;
&lt;h2 id="anatomia-de-um-unit-file"&gt;Anatomia de um Unit File&lt;/h2&gt;
&lt;p&gt;Os unit files do systemd são arquivos de configuração em formato INI que definem como um serviço, timer, mount ou outro recurso do sistema deve ser gerenciado. As seções principais são:&lt;/p&gt;</description></item><item><title>Conhecendo o basico do comando git stash</title><link>https://blog.chcdc.com.br/posts/conhecendo-o-basico-do-comando-git-stash/</link><pubDate>Sat, 16 Apr 2022 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/conhecendo-o-basico-do-comando-git-stash/</guid><description>&lt;p&gt;Diversas vezes quando esta trabalhando em uma parte do seu projeto e precisa
mudar de branch por um tempo para trabalhar em outro codigo voce pode se encontrar em
um problema, não fazer o commit por um trabalho incompleto para continuar
depois.
A resposta para esse problema é &lt;code&gt;git stash&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Nesse post, vamos abordar de forma superficial a utilização desse comando&lt;/p&gt;</description></item><item><title>Iniciando em git - Comandos Básicos</title><link>https://blog.chcdc.com.br/posts/iniciando-em-git-comandos-b%C3%A1sicos/</link><pubDate>Tue, 22 Jun 2021 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/iniciando-em-git-comandos-b%C3%A1sicos/</guid><description>&lt;p&gt;Seguindo a sequencia, nesse post vamos iniciar o git com os comandos básicos.&lt;/p&gt;
&lt;p&gt;Os conceitos eu abordei &lt;a href="https://blog.chcdc.com.br/posts/git-conceitos-e-historia/#os-tres-estados"&gt;aqui&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para esse Post, vamos utilizar um sistema baseado em Linux, porém os comandos são similares para sistemas Windows e MacOS.&lt;/p&gt;</description></item><item><title>Git Conceitos básicos e História</title><link>https://blog.chcdc.com.br/posts/git-conceitos-b%C3%A1sicos-e-hist%C3%B3ria/</link><pubDate>Sun, 20 Jun 2021 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/git-conceitos-b%C3%A1sicos-e-hist%C3%B3ria/</guid><description>&lt;p&gt;Nesse post vamos falar um pouco sobre a história e os conceitos básicos do GIT.&lt;/p&gt;
&lt;!-- PELICAN_END_SUMMARY --&gt;
&lt;h3 id="historia"&gt;Historia&lt;/h3&gt;
&lt;p&gt;O núcleo (kernel) do Linux é um projeto de código aberto com um escopo bastante grande.&lt;/p&gt;
&lt;p&gt;Em 2002, o projeto do núcleo do Linux começou usar uma DVCS proprietária chamada BitKeeper.&lt;/p&gt;
&lt;p&gt;Em 2005, a relação entre a comunidade que desenvolveu o núcleo do Linux e a empresa que desenvolveu BitKeeper quebrou em pedaços, e a ferramenta passou a ser paga.&lt;/p&gt;</description></item><item><title>Migrando repositórios do SVN para o GIT</title><link>https://blog.chcdc.com.br/posts/migrando-reposit%C3%B3rios-do-svn-para-o-git/</link><pubDate>Sat, 14 Dec 2019 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/migrando-reposit%C3%B3rios-do-svn-para-o-git/</guid><description>&lt;p&gt;Nesse post vou mostrar como migrar projetos do svn para o git.&lt;/p&gt;
&lt;p&gt;Vou partir do principio que já entende como o &lt;a href="https://subversion.apache.org/"&gt;Subversion&lt;/a&gt; e o &lt;a href="https://git-scm.com/"&gt;Git&lt;/a&gt; se comportam.&lt;/p&gt;
&lt;p&gt;Para tudo ocorrer como esperado, o nosso ambiente precisa estar seguinte forma:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cliente svn instalado&lt;/li&gt;
&lt;li&gt;Cliente git mais recente instalado&lt;/li&gt;
&lt;li&gt;Pacote git-svn&lt;/li&gt;
&lt;li&gt;PATH configurado que inclua o cliente git,svn e git-svn&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Criando um servidor OpenVPN no CentOS 7</title><link>https://blog.chcdc.com.br/posts/criando-um-servidor-openvpn-no-centos-7/</link><pubDate>Mon, 20 May 2019 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/criando-um-servidor-openvpn-no-centos-7/</guid><description>&lt;p&gt;OpenVPN é uma aplicação VPN de código aberto que permite criar e participar de uma rede privada de forma segura através da Internet pública.&lt;/p&gt;
&lt;p&gt;Vamos instalar e configurar o OpenVPN em um servidor CentOS 7.&lt;/p&gt;
&lt;p&gt;Levando em consideração que o servidor Linux baseado na distribuição CentOS 7 esteja devidamente instalado e com a rede configurada, vamos iniciar a instalação.&lt;/p&gt;</description></item><item><title>Configurando Acesso Seguro em Múltiplos Servidores</title><link>https://blog.chcdc.com.br/posts/configurando-acesso-seguro-em-m%C3%BAltiplos-servidores/</link><pubDate>Sat, 27 Apr 2019 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/configurando-acesso-seguro-em-m%C3%BAltiplos-servidores/</guid><description>&lt;p&gt;O SSH (Secure Shell) é a ferramenta padrão para acesso remoto a servidores Linux. Porém, a configuração padrão do SSH não é suficiente para ambientes de produção, especialmente quando expostos à internet. Ataques comuns incluem brute force em senhas, port scanning e tentativas de exploração de vulnerabilidades conhecidas.&lt;/p&gt;
&lt;p&gt;Neste post, vamos configurar um SSH seguro e automatizar essas configurações em múltiplos servidores usando Ansible.&lt;/p&gt;
&lt;h2 id="backup-e-preparação"&gt;Backup e Preparação&lt;/h2&gt;
&lt;p&gt;O arquivo que iremos trabalhar e efetuar as alterações é o&lt;/p&gt;</description></item><item><title>Dicas IPTables</title><link>https://blog.chcdc.com.br/posts/dicas-iptables/</link><pubDate>Sun, 16 Dec 2018 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/dicas-iptables/</guid><description>&lt;p&gt;Existem 3 tabelas gerenciáveis no IPTables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;FILTER - esta é a tabela padrão, responsável pela filtragens de pacotes. Possui três cadeias de conjuntos de regras:
&lt;ul&gt;
&lt;li&gt;INPUT - pacotes destinados a sockets locais&lt;/li&gt;
&lt;li&gt;FORWARD - pacotes encaminhados (roteados) através do firewall&lt;/li&gt;
&lt;li&gt;OUTPUT - pacotes gerados localmente&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;NAT - é uma tabela que é consultada quando um pacote tenta criar uma nova conexão. Pode alterar características de origem ou de destino de um pacote. Possui três cadeias de conjuntos de regras:
&lt;ul&gt;
&lt;li&gt;PREROUTING - utilizado para alterar um pacote, logo que é recebido&lt;/li&gt;
&lt;li&gt;POSTROUTING - usado para alterar pacotes quando eles estão prestes a sair&lt;/li&gt;
&lt;li&gt;OUTPUT - usado para alterar pacotes gerados localmente&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MANGLE - esta tabela é usada para alteração de pacotes. Até o kernel versão 2.4 esta tabela tinha apenas 2 cadeias, mas eles são agora 5:
&lt;ul&gt;
&lt;li&gt;PREROUTING - para alterar as conexões de entrada&lt;/li&gt;
&lt;li&gt;OUTPUT - para alterar pacotes gerados localmente&lt;/li&gt;
&lt;li&gt;INPUT - para pacotes de entrada&lt;/li&gt;
&lt;li&gt;POSTROUTING - para alterar pacotes quando eles estão prestes a sair&lt;/li&gt;
&lt;li&gt;FORWARD - pacotes encaminhados (roteados) através do firewall&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;1 - Exibir todas as regras disponíveis&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Criando VPN IPSec com StrongSwan entre Digital Ocean e AWS</title><link>https://blog.chcdc.com.br/posts/criando-vpn-ipsec-com-strongswan-entre-digital-ocean-e-aws/</link><pubDate>Tue, 18 Sep 2018 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/criando-vpn-ipsec-com-strongswan-entre-digital-ocean-e-aws/</guid><description>&lt;p&gt;Conforme mostrei nesse &lt;a href="https://blog.chcdc.com.br/posts/vpn-ipsec/"&gt;post&lt;/a&gt; vamos agora configurar uma VPN IPSec.&lt;/p&gt;
&lt;p&gt;Vamos utilizar o &lt;a href="https://www.strongswan.org/"&gt;StrongSwan&lt;/a&gt; para configurarmos a VPN IPSec.&lt;/p&gt;
&lt;p&gt;Os peers serão configurados em dois ambientes distintos, Digital Ocean e AWS.&lt;/p&gt;</description></item><item><title>VPN IPSec</title><link>https://blog.chcdc.com.br/posts/vpn-ipsec/</link><pubDate>Sat, 15 Sep 2018 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/vpn-ipsec/</guid><description>&lt;p&gt;É um conjunto de protocolos que oferece uma segurança no nivel de camada IP. Sendo assim opera pela camada de rede (camada 3) do modelo OSI e modelo TCP/IP.&lt;/p&gt;
&lt;p&gt;O IPsec pode ser usado para proteger dados de rede, por exemplo, configurando circuitos usando o encapsulamento IPsec, no qual todos os dados enviados entre dois pontos de extremidade são criptografados, como em uma conexão VPN ( Rede Virtual Privada ); para criptografar dados da camada de aplicativo ; e para fornecer segurança aos roteadores que enviam dados de roteamento pela Internet pública. O IPsec também pode ser usado para fornecer autenticação sem criptografia, por exemplo, para autenticar os dados originados de um remetente conhecido.&lt;/p&gt;
&lt;p&gt;O tráfego da Internet pode ser protegido de host para host sem o uso de IPsec, por exemplo, por criptografia na camada de aplicativo (Camada 7 do modelo OSI ) com HTTP Seguro (HTTPS) ou na camada de transporte (Camada 4 do modelo OSI) com o protocolo TLS ( Transport Layer Security ). No entanto, quando o tráfego usa criptografia ou autenticação nessas camadas superiores, os agentes de ameaça ainda podem interceptar informações de protocolo que podem expor dados que devem ser criptografados.&lt;/p&gt;
&lt;p&gt;Pode usar criptografia para fornecer segurança. O IPsec pode ser usado para a configuração de redes privadas virtuais (VPNs) de maneira segura.&lt;/p&gt;</description></item><item><title>Entendendo as Permissões no Linux</title><link>https://blog.chcdc.com.br/posts/entendendo-as-permiss%C3%B5es-no-linux/</link><pubDate>Tue, 27 Feb 2018 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/entendendo-as-permiss%C3%B5es-no-linux/</guid><description>&lt;p&gt;As permissões são usadas para definir quem pode acessar determinados arquivos ou diretórios, assim mantendo segurança e organização em seu sistema e sua rede.&lt;/p&gt;
&lt;p&gt;Quando, em um sistema (li)Unix digitamos o comando &lt;code&gt;ls -l&lt;/code&gt; temos a seguinte visualização:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.chcdc.com.br/posts/entendendo-as-permiss%C3%B5es-no-linux/ls_l.png" alt="ls -l"&gt;&lt;/p&gt;
&lt;p&gt;Vemos o primeiro item em cada linha é a forma utilizada para mostrar as permissoes do arquivo.
O Linux trata todos os diretórios como arquivos também, portanto, as permissões se aplicam de igual forma para ambos.&lt;/p&gt;</description></item><item><title>Copiando arquivos com Python</title><link>https://blog.chcdc.com.br/posts/copiando-arquivos-com-python/</link><pubDate>Wed, 14 Feb 2018 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/copiando-arquivos-com-python/</guid><description>&lt;p&gt;Nesse &lt;a href="chcdc.com.br/posts/enviar-emails-com-python"&gt;post&lt;/a&gt; ensinei a criar um script basico para o envio de emails usando python.&lt;/p&gt;
&lt;p&gt;Vamos agora aprender a coletar os logs (ou arquivos que voce desejar) para anexar ao script de envio de emails.&lt;/p&gt;
&lt;p&gt;Lembrando que a versão do Python que iremos trabalhar é a &lt;strong&gt;3.6&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Antes de tudo vamos instalar o modulo &lt;a href="http://docs.paramiko.org/en/2.4/"&gt;Paramiko&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ pip3.6 install paramiko
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Vamos inserir os modulos&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python3.6" data-lang="python3.6"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import shutil
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;import paramiko
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Começamos importando os modulos necessarios para acessar e copiar os arquivos.
Os modulos que vamos utilizar são &lt;a href="http://docs.paramiko.org/en/2.4/"&gt;Paramiko&lt;/a&gt; e o &lt;a href="https://docs.python.org/3.6/library/shutil.html"&gt;shutil&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Enviar emails com Python</title><link>https://blog.chcdc.com.br/posts/enviar-emails-com-python/</link><pubDate>Fri, 09 Feb 2018 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/enviar-emails-com-python/</guid><description>&lt;p&gt;Hoje me foi proposto um desafio, coletar logs de um servidor via Telegram e enviar por email.&lt;/p&gt;
&lt;p&gt;Após algumas horas em pesquisa, cheguei ao seguinte script que vou ensinar mais abaixo, primeiramente vamos fazer
o script de envio de emails.&lt;/p&gt;
&lt;p&gt;Antes de tudo, caso use GMail, você precisa permitir &amp;ldquo;aplicativos menos seguros&amp;rdquo; para executar seu script.&lt;/p&gt;
&lt;p&gt;A versão do Python que iremos trabalhar é a &lt;strong&gt;3.6&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Vamos começar com um script simples,
existe uma biblioteca nativa em Python para enviar e-mails: smtplib. Não será necessário instalar bibliotecas externas!&lt;/p&gt;</description></item><item><title>Gerando senhas seguras utilizando python</title><link>https://blog.chcdc.com.br/posts/gerando-senhas-seguras-utilizando-python/</link><pubDate>Tue, 09 Jan 2018 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/gerando-senhas-seguras-utilizando-python/</guid><description>&lt;p&gt;Nesse &lt;a href="http://chcdc.com.br/posts/gerando-senhas-seguras"&gt;post&lt;/a&gt; ensinei a usar o pwgen para criar senhas, porém ele não tem me suprido pois necessito de senhas especificas.&lt;/p&gt;
&lt;p&gt;Preciso enviar senhas de comprimento oito e apenas numeros e letras minusculas.&lt;/p&gt;
&lt;p&gt;Resolvi criar então um script em Python para gerar essas senhas.&lt;/p&gt;
&lt;p&gt;Vamos começar por partes&lt;/p&gt;</description></item><item><title>Organizando arquivos por extensão usando Python</title><link>https://blog.chcdc.com.br/posts/organizando-arquivos-por-extens%C3%A3o-usando-python/</link><pubDate>Wed, 25 Jan 2017 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/organizando-arquivos-por-extens%C3%A3o-usando-python/</guid><description>&lt;p&gt;Recentemente fiz download de milhares de arquivos em pdf (não foi pirataria ok?!) e precisava organizar eles em uma pasta especifica.&lt;/p&gt;
&lt;p&gt;Pesquisei diversas formas de fazer isso, poderia fazer facilmente em &lt;strong&gt;Shell Script&lt;/strong&gt; mas como estou aprendendo &lt;strong&gt;Python&lt;/strong&gt; aceitei o desafio.&lt;/p&gt;
&lt;p&gt;Bom vamos ao código.&lt;/p&gt;</description></item><item><title>Criando um Bot do Telegram</title><link>https://blog.chcdc.com.br/posts/criando-um-bot-do-telegram/</link><pubDate>Sun, 18 Sep 2016 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/criando-um-bot-do-telegram/</guid><description>&lt;p&gt;Sim, resolvi me aventurar no desenvolvimento de um bot utilizando a &lt;a href="https://core.telegram.org/bots/api"&gt;API do Telegram&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Irei contar a minha saga da criação desse bot nesse maravilhoso &lt;a href="https://telegram.org"&gt;Telegram&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pra fazer um bot novo, é muito simples.&lt;/p&gt;</description></item><item><title>Monitorar conexoes utilizando TCPDump</title><link>https://blog.chcdc.com.br/posts/monitorar-conexoes-utilizando-tcpdump/</link><pubDate>Wed, 20 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/monitorar-conexoes-utilizando-tcpdump/</guid><description>&lt;p&gt;O tcpdump é um famoso sniffer para sistemas Linux. Muito util para analise e solução de problemas da rede.&lt;/p&gt;
&lt;p&gt;Sua documentação pode ser encontrada no site oficial.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.tcpdump.org"&gt;TCPDUMP&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A maioria das distribuições linux possuem binarios, caso não possua, sua instalação é bem simples.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sudo apt-get install tcpdump
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Instalando Telegram-Cli</title><link>https://blog.chcdc.com.br/posts/instalando-telegram-cli/</link><pubDate>Fri, 22 Apr 2016 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/instalando-telegram-cli/</guid><description>&lt;p&gt;Telegram-CLI é um cliente do Telegram baseado na linguagem lua, ele é executado a partir do terminal.&lt;/p&gt;</description></item><item><title>Como Gerar Senhas seguras com PWGEN</title><link>https://blog.chcdc.com.br/posts/como-gerar-senhas-seguras-com-pwgen/</link><pubDate>Wed, 20 Jan 2016 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/como-gerar-senhas-seguras-com-pwgen/</guid><description>&lt;p&gt;Frequentemente preciso enviar senhas de VPN para clientes, criar ou alterar senhas novas para os servidores.
Existem diversas ferramentas online que isso possa ser feito, mas ao meu ver, o tempo que demoro em acessar essas ferramentas se torna muito grande.
Após algumas pesquisas encontrei um pacote que pode fazer isso pelo terminal.&lt;/p&gt;
&lt;p&gt;Para instalar vamos baixar e compilar o pacote.&lt;/p&gt;</description></item><item><title>Removendo vários arquivos de uma lista gigante</title><link>https://blog.chcdc.com.br/posts/removendo-v%C3%A1rios-arquivos-de-uma-lista-gigante/</link><pubDate>Sat, 02 Jan 2016 00:00:00 +0000</pubDate><guid>https://blog.chcdc.com.br/posts/removendo-v%C3%A1rios-arquivos-de-uma-lista-gigante/</guid><description>&lt;p&gt;Por experiência própria, vez por outra preciso apagar vários arquivos gigantescos (geralmente logs) de uma única vez e a seguinte mensagem é gerada:&lt;/p&gt;
&lt;p&gt;/bin/rm Argument list too long (Lista de argumento muito longa)&lt;/p&gt;
&lt;p&gt;E daí, o que fazer?&lt;/p&gt;</description></item></channel></rss>