Linux
Tips, tutorials and walkthroughs for the modern Linux developer.
-
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
-
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
-
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 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
-
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.
-
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
-
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.
-
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.
-
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?
-
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.
-
Augmenting Linux Swap Space
How to extend Swap space on Linux after you already set it