• kubectl create pizza

    making kubernetes do what it was always meant to do - order pizza

  • kubernetes secrets

    exploring kubernetes secrets from the kubelet's perspective

  • quality of service and oom in kubernetes

    into the details of resource reservation and oom killing

  • containerd - concourse runtime up to speed

    an overview of containerd (internal Concourse chat)

  • go: observing stack grow and shrink

    enabling stackDebug to see debug prints from golang runtime

  • an intro to bpf

    an introductory talk on BPF

  • golang http context cancellation under the hood

    replicating the go way of cancelling a read over the network

  • a standalone kubelet with containerd

    installing containerd and getting a sole kubelet to create pods via CRI

  • failed to locate iptables

    kernel tracing to figure out a little mistake

  • a practical look into overlayfs

    how to use overlayfs and some analysis of its performance impact in certain situations

  • capturing system-wide process execution time

    /usr/bin/time is great, but, what if you could have a system-wide "time" program that captures process execution time with neglebible overhead?

  • the effect of writing to the uid map proc file

    a dive into the mechanics of writing to /proc/pid/uid_gid when setting up user namespaces

  • tar and permission bits

    exploring how tar deals with uid and gids when archiving and extracting under different types of users

  • the setuid bit, or, how sudo minimally works

    a deep dive into the mechanism that allows sudo to work

  • user namespaces and why some containers might take a while to start in Concourse

    a look into the translations performed under the hood

  • improving streaming between Concourse workers

    what if we cut the intermediaries?

  • tracing builds in Concourse

    what if we could use distributed tracing tools to better understand our builds?

  • why you just can't kill a Linux process that is frozen

    some explorations on how sending signals work, and why a SIGKILL fails for frozen processes

  • glibc and golang - an interesting mix

    exploring what glibc is, what ISO C and POSIX covers, and why golang might use glibc for some standard libraries.

  • booting a fresh linux kernel on qemu

    going from source code to a working linux on qemu

  • a very quick intro to prometheus

    a lightning talk on Prometheus

  • serving tarballs as container images

    some thoughts on serving container images from a tarball as if you had a container images registry

  • A Raspberry PI Concourse Worker

    Lessons learned building Concourse workers for ARM - a visit to CGO cross compilation, and necessary modifications to the workers' runtime

  • How Linux creates sockets and counts them

    A deep dive into what goes under the hood in the Linux kernel when you can the socket system call

  • Using /proc to get a process' current stack trace

    Check out how you can use the proc filesystem to retrieve the kernel stack trace of a given process

  • Process resource limits under the hood

    Go through the internals of implementing ulimit, how prlimit works, as well as inspecting how the kernel limits the number of open files

  • Why top and free inside containers don't show the correct container memory

    Go through the reason why free and top show the host's memory instead of container memory.

  • How is /proc able to list process IDs?

    Go through how we can use syscalls to list directory entries and at which point procfs responds to that.

  • What is /proc?

    Get to know what is under the hood of procfs - what Linux does when you interact with /proc

  • A month of /proc

    The challenge has been set - a month of blog posts around procfs!

  • A bpftrace Ansible role

    Check out how to fetch and install bpftrace using Ansible

  • Article recommendation using Hugo

    How to generate a list of recommended articles using Hugo

  • A UDP server and client in Go

    Getting from Golang's net package down to the Linux kernel methods invoked when UDP messages are sent.

  • Retrieving the full path of a process on MacOS (and exploring procfs)

    Getting the absolute path of process on a MacOS machine might not be as simple as in Linux.

  • Dmesg under the hood

    Dmesg allows us to grasp what's going on under the hood when the kernel gets bad. Check out how dmesg is able to read kernel logs and show to the user.

  • Analyzing Tcpdump capture in real-time with Wireshark

    Check out how to pipe a live packet capture from tcpdump into a Wireshark instance in MacOS

  • Passing the results of a command as a file to another script

    Bash process substitution can make you not depend on processes expecting input from the standard input. Learn how to supply the result of a script as a temporary filename for another command.

  • Measuring HTTP response times with cURL

    Without getting out of your current shell and installing other utilities, give cURL a try to measure response times - it can do it.

  • How to minify and bundle assets using Hugo

    Hugo Pipes arrived - asset post-processing is now built directly into Hugo. Check out how I made use of CSS minification and bundling to render AMP pages better

  • Shell: replacing a variable with the contents of a file

    How to create a poor man's templating engine using AWK

  • Developing eBPF code with autocompletion support

    There's no need to lose the great features of a well set up Vim configuration when coding eBPF code.

  • Blocking ingress traffic to Docker swarm worker machines

    Once a Docker Swarm Mode cluster is formed, all nodes participate in the routing mesh and accept ingress traffic. Check out how to block that feature.

  • How to set up a Private Docker Registry using AWS S3

    Go through the process of creating a Terraform configuration for deploying a Docker registry to an instance making use of IAM roles.

  • Retrieving Docker Registry metrics using Prometheus

    Docker registry used not to have a Prometheus exporter by default. Check out how to make use of it in the development branch.

  • Navigating the Linux Kernel source tree with YouCompleteMe

    Check out how to configure YouCompleteMe to have auto completion and source code navigation capabilities for the Linux source code.

  • A minimal TCP Client in C

    Go through the steps and syscalls involved in creating a TCP client using C.

  • Using network namespaces and a virtual switch to isolate servers

    Yet another blog post on how to create a virtual network that connects network namespaces using a brdige, veth pairs and iptables.

  • Adding privileged containers to Docker Swarm mode

    Privileged services are not something you can have with a regular Docker Swarm cluster. Check out how to have privileged containers using Docker Swarm Mode

  • Compiling and running your own forked Docker release

    Installing docker has never been easier - add the apt repository and install it. What about running your own fork of it?

  • Shell: how to add a prefix to the output of multiple commands

    Executing multiple shell commands in continuous integration might become hard to read. Check out how to prefix command executions using bash.

  • Using HAProxy maps with Access control lists (acl)

    HAProxy frontends can have their logic simplified by using maps. Check out how to tie maps with ACLs to improve routing.

  • Making HAProxy respond 200 OK to health checks

    Sometimes you need HAProxy to have a special frontend to return 200 OK when a request is made for health-checking purposes. Check out three ways of doing it.

  • Blocking EC2 Metadata service from Docker containers in AWS

    Check out how to make sure Docker containers running in AWS are unnable to access the EC2 metadata service.

  • Running Docker with a forked RunC

    Check oout how the docker daemon interacts with containerd and how we can leverage that to modify runc and set some defaults

  • Implementing a TCP server in C

    Writing a TCP server in C can teach many things. Check out how to implement a TCP server and understand some of the syscalls involved in the process.

  • Using C to inspect Linux syscalls

    A deep dive into how to make use of ptrace to inspect syscalls made by a tracee while they occur.

  • How to set up AWS EFS across multiple availability zones using Terraform

    Having an AWS EFS file system over multiple availability zones using Terraform is not complicated. Check out one way of doing it.

  • A practical look at basic AWS Networking with Terraform

    A conventional AWS Networking Tutorial out there using Terraform doesn't go around the concepts of AWS Networking. Check out how to provision an AWS VPC with multiple subnets and configure security groups using Terraform.

  • How to collect Docker Daemon Metrics

    Docker ships with native Prometheus integration - the docker daemon can generate metrics about it and let you scrape that. Check out how to gather Docker daemon metrics in Linux and MacOS.

  • Nginx HTTP2 Server Push

    NGINX just added server push to mainline. Checkout a NGINX HTTP2 server push example using the latest code from source integrating with an HTTP1 Golang web server.

  • An Example of Go RPC Client and Server

    Having jump straight to gRPC, I got surprised by how easy is to set up Go RPC using net/rpc package. Check out a simple example exploring this package.

  • The first limit you'll hit on AWS EFS: Locks

    AWS imposes various quotas on the usage of its distributed filesystem. Check out how to go over them by running MYSQL on EFS and then developing a stress test.

  • Initializing Grafana with preconfigured dashboards

    Grafana v5 is coming with two great features: dashboard and data source provisioning. Checkout how to initialize a dashboard without touching the UI using this new release

  • Simulating AWS tags in local Prometheus

    Going through Prometheus relabelling to emulate an AWS environment locally with Vagrant

  • What happens when a pipeline is created in Concourse CI?

    A dive into how the fly command set-pipelines triggers a pipeline registration in concourse ATC

  • How to build and run Concourse CI locally

    Get Concourse CI built from source - the first step to contributing to the project.

  • Creating a simple extension to block websites

    Seeing yourself procrastinating in HackerNews? Create an extension that blocks it. All in less than 20 lines of code.

  • Replacing HAProxy ACLs by HAProxy Maps

    HAProxy maps can reduce the complexity of haproxy configurations by allowing you to define map lookup logic. Check out how to remove ACLs in favor of maps.

  • How to publish a blog using AWS

    AWS can guarantee amazing speeds for serving a blog - it supports HTTP2, IPv6, caching and has free TLS certificates. Check out how I do it for this blog.

  • Configuring HAProxy with HTTP2 support

    HTTP2 support recently landed in HAProxy 1.8. Check out how to configure HTTP/2 support for HAProxy.

  • Sending files via gRPC

    gRPC shines when it comes to sending a bunch of messages here and there. What about file uploads? Is gRPC a good fit for file transfer? Check out how to send files with gRPC and see if that makes sense.

  • Should you buffer your writes?

    It's common practice to have a buffer between the network and your application. Today I tried to measure how different buffer sizes changes the total time to transfer 1GB of data.

  • Writing DNS messages from scratch using Go

    How to write a DNS message from zero and send it via UDP to a server.

  • Can we manage multiple GitHub repositories in a better way?

    Wondering how a project manager might look at GitHub triggered some questioning. How could someone extract more meaningful data from it?

  • Creating a hello-world API using Swagger and Go

    Swagger allows us to separate api definition from implementation. This guide goes through the process of creating a minimal API using go-swagger and Golang.

  • A minimal Docker Ansible role

    How to create a minimal Ansible role that provisions a Linux machine to have Docker installed - from role conception to testing it using Vagrant.

  • Incremental backups using GNU Tar and S3

    How to take snapshots of a directory and send to them as backups to S3 using Linux tools

  • Updating the Docker version in Travis-CI

    Docker is not always up to date in Travis' builds. Check out how to update the version of Docker in Travis-CI.

  • Forcing (from inside) the redirection of all outputs of a bash script to a file

    Using exec to redirect force redirection from within a bash script.

  • Inspecting Docker images without pulling them

    How to inspect a docker image from dockerhub without pulling it

  • Getting TLS certificates with Letsencrypt and HAProxy

    A guide on building and configuring HAProxy from scratch to achieve HTTPS with Letsencrypt certificates

  • Pushing Docker images right from Travis-CI

    How to automate the process of building an image and pushing it to DockerHub using Travis-CI

  • Changing the name of an index in Elasticsearch

    Elasticsearch indices can be renamed with two different approaches - Reindex API and Aliases. Checkout out how to rename an Elasticsearch Index using these approaches.

  • Executing multiple commands in SSH session against multiple machines

    It might happen that you need to execute multiple commands against a set of machines via SSH. Check out how to do it programmatically.

  • Concurrently running container-based and VM tests in Travis-CI

    Running container and virtual machines side by side in Travis is possible. Check out how to do it

  • Why my Ubuntu container doesn't execute profile scripts?

    Making use of the login flag to make sure bash executes profile.d scripts.

  • A Dockerfile tailored for Golang applications

    Leveraging multi-stage builds to create tiny Golang Docker images

  • LVM on loopback devices

    An actionable guide on how to use LVM without formatting physical disks and just using loopback devices

  • Minimal Golang Makefile

    Having build many Golang projects I came with a minimalist makefile that might work for you. If you're looking for a starter Makefile for Go, here you go.

  • How to install HAProxy with Lua support on MacOS

    Setting up HAProxy on Mac is not complicated. Check out how to build it from source and run it locally.

  • HAProxy Docker Container Logs

    HAProxy doesn't naturally log to standard out - you need to pick rsyslog and make it do so. Check out how to have HAProxy logs going to stdout using Docker containers.

  • Augmenting Linux Swap Space

    How to extend Swap space on Linux after you already set it

  • GitHub
  • LinkedIn

© Ciro da Silva da Costa, 2018.