Skip to content

Package creation for Debian written in pure Golang

License

Notifications You must be signed in to change notification settings

xor-gate/debpkg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

debpkg

License Godoc ReportCard Build BuildAppVeyor Coverage

debpkg is a pure Go library to create Debian Linux packages. The package can be directly imported in your go project or run a debpkg cli tool with a custom debpkg YAML specfile (just like a single RPM spec file). It has zero dependencies outside go modules, to and doesn't use exec wrappers. Therefor it is able to generate packages from non Linux systems like Mac OS X, *BSD and Windows without the Perl dependency (as with official debbuild). The "problem" with the Debian package build system is it universal and flexable nature, which can be a pro or con. Packaging just a small bunch of files with simple configuration the Debian build system is a fairly complex beast to understand. And you must dig deep into the workings of the Debian package management documentation. Debpkg is not able to resolve all the advanced packaging requirements theirfor one must use the official debbuild and debhelper. It is created for the simple case to convert a directory structure to be installable and maintained via the standard debian way.

Features

The feature list below describes the usability state of the project:

  • Create debian packages from files and folders
  • Create package from debpkg.yml specfile
  • Add custom control files (preinst, postinst, prerm, postrm etcetera)

It is currently not possible to use the debpkg as a framework to manipulate and introspect individual Debian package objects (see issue #26). As it is only capable of creating packages.

Why this package was created

This package was created due to the lack to debianize from other platforms (windows/mac/*bsd). Because the whole debian package management system is glued together with Perl scripts and uses a bunch of Perl modules. Which isn't easy to use in a CI/CD pipeline for Go projects.

Converting a simple directory structure with files into a debian package is a difficult without knowing the deb-file internals.

This package is heavily inspired by godeb and CPackDeb. It is very royal licensed.

Installation

go get -u github.com/xor-gate/debpkg/cmd/debpkg

Status

The package is currently in production state. The API is stable (v1).

debpkg.yml specfile

The specfile is written in the YAML markup format. It controls the package information and data.

A simple example is listed below:

# debpkg.yml specfile
name: foobar
version: 7.6.5
architecture: all
maintainer: Foo Bar
maintainer_email: [email protected]
homepage: https://github.com/xor-gate/debpkg
description:
  short: This package is just a test
  long: >
    This package tests the working of debpkg.
    And can wrap multiple
    lines.

    And multiple paragraphs.

Mentions

This project originate from an in-company implementation sponsored by @dualinventive in 2016-2017, with help from collegue @rikvdh.

I would like to mention some other noticable projects for debian package management:

Other packaging tools in golang:

Debugging

When debugging on a Debian system the following commands are usefull:

  • Print package info: dpkg --info <debfile>
  • Extract data.tar.gz: dpkg --extract <debfile> data
  • Verbose extract data.tar.gz: dpkg --vextract <debfile> data
  • Extract control.tar.gz: dpkg --control <debfile> control
  • Show .deb file contents: dpkg-deb dpkg-deb --contents package.deb
  • Install .deb file manually without repository: dpkg -i package.deb

Further documentation

More information can be gathered from the Debian and Ubuntu documentation:

License

MIT