How Debian packaging works

Debian packaging can be quite mysterious and hard to figure out. In this guide I'll provide a simple introduction into the Debian packaging process and its most important concepts.

This is not a full guide into all aspects of packaging. Instead, I'll cover just enough of the basics to help you develop a mental model of what Debian packaging is about, and to be able to produce useful results.

I'll cover:

  • What a Debian package is.
  • The anatomy of a package.
  • How to inspect a package.
  • How to create a package.
  • What APT repositories are.
  • How to create an APT repository.

Read more »

Why piping to 'cat' can stuck a CI job 🙀

What's the difference between command and command | cat? There shouldn't be any, right? The first prints the output directly, and the latter prints output via cat, but they should have the same effect. Not so: the latter can cause the command to get stuck indefinitely. This has given a particular CI pipeline of mine quite some headache.

To learn why this happens, and how we can mitigate this problem, we need to dive into the arcane magic that is Unix process management. Join me on this journey.

Read more »

Why Fullstaq Ruby?

A while ago, the people from Fullstaq and I started the Fullstaq Ruby project: a Ruby distribution that's optimized for server use cases. Compared to normal MRI Ruby, Fullstaq Ruby uses 50% less memory, is faster, and is easier to install and security-patch because of RPM and DEB packages.

Since I announced Fullstaq Ruby on EuRuKo 2019, I have received many questions about Fullstaq Ruby's vision, purpose and nature:

  • Is Fullstaq Ruby a commercial product, or are there such plans?
  • How will Fullstaq Ruby stay maintained?
  • Who is in control of Fullstaq Ruby?
  • Why are the changes in Fullstaq Ruby not in upstream Ruby? What is the current, and envisioned, relationship between the Ruby core developers and Fullstaq Ruby?

In other words, people are wondering: "how do I know this is, and stays, a real thing that I can count on?"

These are legit questions! As the author of Passenger and Ruby Enterprise Edition, I've experienced first-hand what the challanges are of building a healthy open source project. In this post, I will describe my vision on this matter.

Read more »

Fullstaq Ruby epic 3: CI/CD (= faster updates), Ruby updates, Debian 10 support

Fullstaq Ruby is a server-optimized Ruby distribution: 50% less memory, faster, easy to install and security-patch via APT/YUM.

We've reached an important milestone in the Fullstaq Ruby roadmap. Epic 3 introduces a continuous integration and deployment system! This means that from now on, we can release updates much faster, and with fewer defects.

We put the CI/CD system to the test right away, and used it to release Ruby version updates. We now package Ruby 2.7.1, 2.6.6 and 2.5.8.

Additionally, we now support Debian 10 (contributed by Nathan Broadbent).

Want to install or upgrade? Check the installation instructions, or run apt upgrade/yum update.

In this article I'll explain why having a CI/CD system is so important. I'll also give you a sneak peek into what to expect in the near future.

Read more »

A better way to reason about software testing terms

I was recently in a discussion between developers about improving the test coverage of a major software project. They needed guidance about what kind of tests to write, and how to write them.

The discussion quickly became confusing: the topic was too large, too general, and it turns out that there wasn't even a well-defined shared vocabulary for testing concepts! The latter turns out to be a wider problem in the software development community: it simply doesn't have well-defined testing terms!

In this post, I'd like to provide some guidance w.r.t. this matter. I'll discuss:

  • An overview of the most common testing terms.
  • A new way of reasoning about testing concepts: reiterating what actually matters, and categorizing tests based on "size" and "approach".
  • How the existing testing terminology fits in this new model.

Read more »

Debugging Docker builds

One of the projects I'm working on has a CI/CD pipeline that builds Docker images. The Dockerfile runs yarn install, then yarn build. The latter runs the TypeScript compiler tsc. Everything was working fine, but one day the build failed with the following error:

tsc: command not found

But TypeScript is still part of package.json. Nobody touched package.json or yarn.lock recently. Nobody could reproduce the problem locally with Docker: it only happened in the CI/CD pipeline. What is going on? We needed to debug the Docker build on the CI/CD server.

Read more »

Software development is like surgery

Estimating how long it takes to build software – or even how much effort a sprint is – is pretty hard. Estimates often turn out to be too optimistic, and mispredictions can be pretty hard to explain to management. I know why this is so – Michael Wolfe on Quora has a great analogy (there is even an interesting discussion on Reddit), which I agree with. But I'm wondering whether there's an easier analogy.

Read more »
Page 2 of 6