About the Course

Look at an overview of the course and its target audience.

Many Linux distributions offer a large variety of software that is prepackaged for convenient installation, usually just a click (or a line on the command line) away.

Creating such software packages for the Debian and Ubuntu family of Linux operating systems is the topic of this course.

If you are a software developer, it might be the software you are writing yourself that you want to package. System administrators often need to package third-party software they distribute to their users and customers.

This course targets people who have basic familiarity with the Linux command line (cd, ls, mkdir, cp, and mv) and know how to edit and create text files.

Basic software development knowledge and familiarity with common build systems such as GNU Make are advantageous but not necessary.

Typographic conventions

  • Command names, input, and output appearing in the text are printed in a highlighted font.

  • Commands that we can enter in our shell are prefixed by a dollar sign $, and the output it produces is not:

    $ dpkg --print-architecture
    

    Here is the output of the above command:

    amd64
    
  • Placeholders that we are supposed to replace ourselves are indicated with angle brackets. In the file name <package-name>.postinst, replace <package-name> with your actual package name.

Overview of the course

We start with an overview of the ecosystem the Debian packages live in and then explore what files and metadata a Debian package is made of.

  • The next chapters explore two ways to build Debian packages: with fpm, a quick (but sometimes a bit dirty) approach, and the standard Debian build system based on debhelper.

  • Then, we cover a quick way to get started with creating a Debian package and later dive into more advanced topics, like building multiple binary packages from a single source package.

  • At the end of the course, we briefly touch on Debian repositories and security aspects around the life cycle of a package.

sudo privilege

Note that we give you access to most of our code editors as a non-root user. Occasionally, you may need root privileges, say, to install a package that you built.

Note: When using sudo, please use the password user.