From 0d45afdcf2b045bb7648ce199f7780a34ccfcd95 Mon Sep 17 00:00:00 2001 From: Jerome Petazzoni Date: Mon, 18 Oct 2021 17:04:37 +0200 Subject: [PATCH] Add instructions to generate static binaries Following the discussion in #1478, we don't want to provide (and maintain) static binaries, but giving instructions to produce such builds (with appropriate warnings around these instructions) was considered acceptable, so - here we go! --- install.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/install.md b/install.md index 75b563271d..d3c7523e45 100644 --- a/install.md +++ b/install.md @@ -203,3 +203,32 @@ Finally, after the binary and documentation is built: ```bash sudo make install ``` + +### Building a static binary + +Static builds of Skopeo tend to be unreliable and functionally restricted. This probably comes from the fact that some Skopeo features depend on non-Go libraries like `libgpgme` and `livdevmapper`. There has been efforts in the past to produce and maintain static builds, but the maintainers prefer to run Skopeo using distro packages or within containers. + +That being said, if you would like to build Skopeo statically, you might be able to do it by: + +- exporting environment variable `CGO_ENABLED=0` (disabling CGO causes Go to prefer native libraries when possible, instead of dynamically linking against system libraries) +- passing the `BUILDTAGS=containers_image_openpgp` Make flag (this remove the dependency on `libgpgme` and its companion libraries) +- commenting out the `GO_DYN_FLAGS` line in the Makefile (this flag seems to force the creation of a dynamic executable) + +The following command implements these steps to produce a static binary in the `bin` subdirectory of the repository: + +```bash +sed 's/GO_DYN_FLAGS=/#/' Makefile | +docker run -i -v $PWD:/src -w /src -e CGO_ENABLED=0 golang \ +make -f- BUILDTAGS=containers_image_openpgp +``` + +Keep in mind that the resulting binary is unsupported and might crash randomly. Only use if you know what you're doing! + +For more information, history, and context about static builds, check the following issues and commits: + +- #670 +- #755 +- #932 +- #1336 +- #1478 +- 0f458eec763626025d5146f00c3809480befe6f3