Guide for Debian Maintainers

Osamu Aoki

Abstract

This tutorial document describes the building of the Debian package to ordinary Debian users and prospective developers using the debmake command.

It is focused on the modern packaging style and comes with many simple examples.

  • POSIX shell script packaging
  • Python3 script packaging
  • C with Makefile/Autotools/CMake
  • multiple binary packages with shared library etc.

This “Guide for Debian Maintainers” can be considered as the successor to the “Debian New Maintainers’ Guide”.


Table of Contents

Preface
1. Overview
2. Prerequisites
2.1. People around Debian
2.2. How to contribute
2.3. Social dynamics of Debian
2.4. Technical reminders
2.5. Debian documentation
2.6. Help resources
2.7. Archive situation
2.8. Contribution approaches
2.9. Novice maintainer
3. Tool Setups
3.1. Email address
3.2. mc
3.3. git
3.4. quilt
3.5. devscripts
3.6. pbuilder
3.7. git-buildpackage
3.8. HTTP proxy
3.9. Private Debian repository
4. Simple Example
4.1. Big picture
4.2. What is debmake?
4.3. What is debuild?
4.4. Step-by-step: upstream
4.5. Step-by-step: debmake
4.6. Step-by-step: maintainer
4.7. Step-by-step: debuild
4.8. Alternative: patch files
5. Basics
5.1. Packaging workflow
5.2. Package name and version
5.3. Native Debian package
5.4. debian/rules
5.4.1. dh
5.4.2. Simple debian/rules
5.4.3. Customized debian/rules
5.4.4. Variables for debian/rules
5.4.5. Reproducible build
5.5. debian/control
5.5.1. Split of the Debian binary package
5.5.2. Substvar
5.5.3. binNMU safe
5.5.4. The library package name
5.6. debmake -b
5.7. debian/changelog
5.8. debian/copyright
5.9. DFSG
5.10. Other debian/*
5.11. signing-key.pgp
5.12. Package customization
5.12.1. debian/rules approach
5.12.2. debian/binarypackage.* approach
5.12.3. patches/* approach
5.13. Upstream build systems
5.13.1. Autotools
5.13.2. CMake
5.13.3. Python distutils
5.14. Debugging information
5.15. Library package
5.16. Multiarch
5.16.1. The multiarch library path
5.16.2. The multiarch header file path
5.16.3. The multiarch *.pc file path
5.17. Library symbols
5.18. Compiler hardening
5.19. Bug report
5.20. debconf
5.21. Continuous integration
6. Options
6.1. Shortcut options (-a, -i)
6.2. Upstream snapshot (-d, -t)
6.3. Python module
6.4. debmake -cc
6.5. debmake -k
6.6. debmake -j
6.7. debmake -x
6.8. debmake -T
7. Tips
7.1. debdiff
7.2. dget
7.3. debc
7.4. piuparts
7.5. debsign
7.6. dput
7.7. bts
7.8. git-buildpackage
7.9. Package history
7.10. Upstream git repository
7.11. chroot
7.12. New Debian revision
7.13. New upstream release
7.13.1. uupdate + tarball
7.13.2. uscan
7.13.3. gbp
7.13.4. gbp + uscan
7.14. Library transition
7.15. 3.0 source format
7.16. CDBS
7.17. Build under UTF-8
7.18. UTF-8 conversion
7.19. Upload orig.tar.gz
7.20. Skipped uploads
7.21. Advanced packaging
7.22. Other distros
8. More Examples
8.1. Cherry-pick templates
8.2. No Makefile (shell, CLI)
8.3. Makefile (shell, CLI)
8.4. setup.py (Python3, CLI)
8.5. Makefile (shell, GUI)
8.6. setup.py (Python3, GUI)
8.7. Makefile (single-binary)
8.8. Makefile.in + configure (single-binary)
8.9. Autotools (single-binary)
8.10. CMake (single-binary)
8.11. Autotools (multi-binary)
8.12. CMake (multi-binary)
8.13. Internationalization
8.14. Details
A. debmake(1) manpage
A.1. NAME
A.2. SYNOPSIS
A.3. DESCRIPTION
A.3.1. optional arguments:
A.4. EXAMPLES
A.5. HELPER PACKAGES
A.6. CAVEAT
A.7. DEBUG
A.8. AUTHOR
A.9. LICENSE
A.10. SEE ALSO