Blog Archive

List of all articles around Linux, Bash, Shell Scripting, Golang and the cloud-native landscape.

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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.

  6. 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.

  7. What is /proc?

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

  8. A month of /proc

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

  9. Article recommendation using Hugo

    How to generate a list of recommended articles using Hugo

  10. 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.

  11. 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.

  12. 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.

  13. 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

  14. 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.

  15. 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

  16. 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.

  17. 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.

  18. 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.

  19. 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

  20. 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?

  21. 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.

  22. 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

  23. 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.

  24. 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.

  25. 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.

  26. 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.

  27. 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

  28. Simulating AWS tags in local Prometheus

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

  29. 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

  30. How to build and run Concourse CI locally

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

  31. 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.

  32. 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.

  33. Configuring HAProxy with HTTP2 support

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

  34. 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.

  35. 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.

  36. Writing DNS messages from scratch using Go

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

  37. 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?

  38. 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.

  39. 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.

  40. 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

  41. 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.

  42. Inspecting Docker images without pulling them

    How to inspect a docker image from dockerhub without pulling it

  43. Getting TLS certificates with Letsencrypt and HAProxy

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

  44. Pushing Docker images right from Travis-CI

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

  45. 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.

  46. 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.

  47. 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

  48. Why my Ubuntu container doesn't execute profile scripts?

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

  49. A Dockerfile tailored for Golang applications

    Leveraging multi-stage builds to create tiny Golang Docker images

  50. LVM on loopback devices

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

  51. 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.

  52. 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.

  53. Augmenting Linux Swap Space

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

  • GitHub
  • LinkedIn

© Ciro da Silva da Costa, 2018.