Post

Creating Debian Packages From Upstream Git

Welcome to this guide on creating Debian packages from upstream Git repositories. This article is designed for experienced sysadmins and DevOps engineers who want to automate their self-hosted infrastructure using.

# Creating Debian Packages From Upstream Git

Welcome to this guide on creating Debian packages from upstream Git repositories. This article is designed for experienced sysadmins and DevOps engineers who want to automate their self-hosted infrastructure using open-source software.

Prerequisites

  • Debian Stable (Buster or later) with a fresh install and updated packages.
  • Git version 2.13.0 or higher.
  • Build Essential package, which includes tools like dh_make, debhelper and others needed for Debian package creation.
1
apt update && apt install git build-essential
  • Docker CE, version 5.0.8 or higher, to create a reproducible environment for the build process.
1
apt install docker-ce=5.0.8 docker-ce-cli containerd.io
  • Familiarity with the software you wish to package, including its build and installation requirements.

Steps to Create a Debian Package

  1. Create the project directory.

    1
    
    mkdir -p ~/my-package && cd ~/my-package
    
  2. Clone the upstream Git repository.

    1
    
    git clone https://github.com/upstream-username/my-package.git .
    
  3. Install the necessary dependencies.

    Create a Dockerfile in your project directory:

    1
    
    nano Dockerfile
    

    Add the following lines to install the required packages inside the build environment:

    1
    2
    3
    4
    5
    
    FROM debian:buster
    
    RUN apt-get update && apt-get install -y \
        build-essential \
        your-package-dependencies
    
  4. Build a Docker image.

    1
    
    docker build -t my-package .
    
  5. Run the build environment.

    1
    
    docker run --rm -it -v $(PWD):/my-package my-package sh -c "/my-package/Dockerfile"
    
  6. Create a debian directory and necessary files for package metadata:

    1
    2
    
    mkdir debian
    touch debian/control debian/changelog debian/rules
    
  7. Configure the package metadata.

    Edit the control file (debian/control) to specify the basic information about your package, such as its name, version, architecture and dependencies:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    Source: .
    Build-Arch: any
    Architecture: all
    Standard-Version: 1.0.0
    
    Section: your-package-section
    Priority: optional
    Maintainer: Your Name <your.email@example.com>
    Homepage: https://github.com/upstream-username/my-package
    
    Depends: your-dependencies, ...
    Description: A brief description of your package.
    
  8. Create a rules file (debian/rules) to automate the build process using debhelper:

    1
    
    dh_make -p
    
  9. Build and sign the Debian package.

    1
    
    debuild --userrights=true -S -uc -uYourName .
    

    This will produce a .deb file in the parent directory.

Troubleshooting

  • If you encounter any issues during the build process, try to isolate the problem by reproducing it outside of the Docker environment.
  • Double-check that all dependencies are correctly specified in the control and rules files.
  • Make sure your package conforms to Debian packaging guidelines (https://www.debian.org/doc/packaging-manuals/).

Conclusion

By following these steps, you’ve learned how to create a Debian package from an upstream Git repository, ensuring that your self-hosted infrastructure remains up-to-date and customizable. Remember to share your packages with the open-source community to help others build and maintain their own infrastructures.

Happy packaging! 🚀🐳🎈

This post is licensed under CC BY 4.0 by the author.