How can I put my Go binary into a Debian package? Since Go is statically linked, I just have a single executable--I don't need a lot of complicated project metadata information. Is there a simple way to package the executable and resource files without going through the trauma of debuild
?
I've looked all over for existing questions; however, all of my research turns up questions/answers about a .deb file containing the golang development environment (i.e., what you would get if you do sudo apt-get install golang-go
).
Install Software Using Dpkg Command deb packages. but unlike other Linux package management systems, it cannot automatically download and install packages with their dependencies. To install a local package, use the dpkg command with the -i flag along with package name as shown.
dh_make is a tool that adds necessary files for making Debian source package from upstream source according to the requirements of the Debian Policy. dh_make must be invoked within a directory containing the source code, which must be named <packagename>-<version>.
Well. I think the only "trauma" of debuild
is that it runs lintian
after building the package, and it's lintian
who tries to spot problems with your package.
So there are two ways to combat the situation:
debuild
: this tool merely calls dpkg-buildpackage
which really does the necessary powerlifting. The usual call to build a binary package is dpkg-buildpackage -us -uc -b
. You still might call debuild
for other purposes, like debuild clean
for instance.lintian
turn a blind eye to selected problems with your package which, you insist, are not problems.Both approaches imply that you do not attempt to build your application by the packaging tools but rather treat it as a blob which is just wrapped to a package. This would require slightly abstraining from the normal way debian/rules
work (to not attempt to build anything).
Another solution which might be possible (and is really way more Debian-ish) is to try to use gcc-go
(plus gold
for linking): since it's a GCC front-end, this tool produces a dynamically-linked application (which links against libgo
or something like this). I, personally, have no experience with it yet, and would only consider using it if you intend to try to push your package into the Debian proper.
Regarding the general question of packaging Go programs for Debian, you might find the following resources useful:
Update on 2015-10-15.
(Since this post appears to still be searched and found and studied by people I've decided to update it to better reflec the current state of affairs.)
Since then the situation with packaging Go apps and packages got improved dramatically, and it's possible to build a Debian package using "classic" Go (the so-called gc
suite originating from Google) rather than gcc-go
. And there exist a good infrastructure for packages as well.
The key tool to use when debianizing a Go program now is dh-golang
described here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With