Commit Graph

55 Commits

Author SHA1 Message Date
Paulo Gomes 03c56e79a0
Download libgit2 libraries for fuzzing
Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-02-11 12:30:46 +00:00
Paulo Gomes fcb62eedc7
Validate LIBGIT2 args are set correctly
Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-02-09 15:52:46 +00:00
Paulo Gomes 60c98b5471
Update libgit2 to 1.1.1-6
Fix issues developing in amd64, arm64 and apple silicon

Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-02-07 13:00:57 +00:00
Paulo Gomes 62928217a0
Optimise cross compilation time
Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-02-07 13:00:56 +00:00
Paulo Gomes 990b4a361b
Use static libraries from built image
Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-02-07 13:00:55 +00:00
Paulo Gomes ac3870c80b
Pin target image to alpine:3.15
Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-01-26 13:06:22 +00:00
Paulo Gomes d163ebae14
Statically build using musl toolchain and target alpine
Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-01-26 12:11:49 +00:00
Stefan Prodan b992afd2c7
Publish SBOM and sign release artifacts
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2022-01-20 13:49:36 +02:00
Paulo Gomes 9ba76a1f94
Enforce runAsNonRoot
BREAKING CHANGE: the controller container is now executed under 65534:65534 (userid:groupid). This change may break deployments that hard-coded the user name 'controller' in their PodSecurityPolicy.

Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-01-19 14:57:26 +00:00
Paulo Gomes 7b04b44706
security: Drop capabilities and enable seccomp
Further restricts the SecurityContext that the controller runs under, by enabling the default seccomp profile and dropping all linux capabilities.
This was set at container-level to ensure backwards compatibility with
use cases in which sidecars are injected into the source-controller pod
without setting less restrictive settings.

BREAKING CHANGE: The use of new seccomp API requires Kubernetes 1.19.

Co-authored-by: Sanskar Jaiswal <sanskar.jaiswal@weave.works>
Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-01-19 14:57:25 +00:00
Paulo Gomes ec9e0f6197
Revert to controller user
Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-01-13 10:16:16 +00:00
Paulo Gomes ab934579bb
Bump libgit2 dependencies to debian bookworm
Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-01-13 10:16:15 +00:00
Paulo Gomes f371eb3035
Fix static build for armv7
Leverage libraries installed in base-debian11 (glibc, libssl and openssl)
therefore refrain from linking libc/libdl and ignore unresolved symbols
at build time.
Libssl had to be kept as the behaviour without it is not consistent across
all supported architectures.

Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-01-13 10:16:11 +00:00
Paulo Gomes 0c9078c5d1
Bump LIBGIT2_TAG to libgit2-1.1.1-2
Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-01-13 10:16:09 +00:00
Paulo Gomes 97d7a6ad22
Use gcr.io/distroless/base-debian11
The statically linked binary has lingering dependencing to glibc, which
leads to errors at runtime when using distroless/static. One key culprit is libnss,
which is not available in static form through package managers.

In order to support distroless/static, glibc would have to be recompiled using
the --enable-static-nss flag, and the resulting libnss_{dns,files}.a would need
to be linked during the build process.

Due to the unnecessary complexity mentioned above, distroless/base is being used
instead.

Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-01-13 10:16:04 +00:00
Paulo Gomes 6ab959d6fb
Add copyright attributions
Adds an initial ATTRIBUTIONS.md file containing the open source
components that source-controller depends on, and their copyright
information.

Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-01-13 10:16:03 +00:00
Paulo Gomes 7f886f0bcf
Statically build source-controller into distroless image
Signed-off-by: Paulo Gomes <paulo.gomes@weave.works>
2022-01-13 10:16:02 +00:00
Aurel Canciu e3d04b31bc
Update Go to v1.17
Signed-off-by: Aurel Canciu <aurelcanciu@gmail.com>
2021-12-20 13:11:21 +01:00
Hidde Beydals dd091a00ae build: update tonistiigi/xx to v1.1.0
https://github.com/tonistiigi/xx/releases/tag/v1.1.0

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-12-10 12:25:14 +01:00
Hidde Beydals 16320c73f1 build: update Go to 1.16.12
Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-12-10 12:24:34 +01:00
Hidde Beydals 2ffd15a548 Update fluxcd/golang-with-libgit2 to 1.1.1-1
This includes a tiny fix for Darwin to ensure the generated `.pc`
file includes the right paths.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-10-08 15:50:55 +02:00
Hidde Beydals 9fd16d8e45 Switch to scratch based libgit2 container image
This moves the `libgit2` compilation to the image, to ensure it
can be build on builders that aren't backed by AMD64.

The image is structured in such a way that e.g. running nightly
builds targeting a different Go version, or targeting a different
OS vendor would be possible in the future via build arguments.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-10-08 09:38:20 +02:00
Hidde Beydals 981d91e363 Update base image to version with Darwin detection
To provide a better (contributing) experience to those with Apple
machines, as determining the correct paths there is a bit harder.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-10-01 19:08:59 +02:00
Hidde Beydals 0358ebc43d Change image to image under Flux organization
Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-09-30 16:37:05 +02:00
Hidde Beydals 7a212b6570 Add `docker-buildx` target to `Makefile`
To allow building a multi-platform container image using `buildx`.

Various configuration flags allow for fine(r)-grain control over the
build process:

- `BASE_IMG`: FQDN of the base image that should be used, without a
  tag.
- `BASE_TAG: tag of the base image that should be used. Allows checksum
  sum to be included.
- `BUILDX_PLATFORMS`: platforms to target for the final container
  image.
- `BUILDX_ARGS`: additional `docker buildx build` arguments, e.g.
  `--push` to push the result to a (local) image registry.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-09-30 16:37:05 +02:00
Hidde Beydals d3c27c37f8 Update github.com/libgit2/git2go to v31.6.1
This commit updates `github.com/libgit2/git2go` to `v31.6.1` (with
`libgit2` `1.1.1`), and changes the container image build process so
that it makes use of `ghcr.io/hiddeco/golang-with-libgit2`.

This image provides a pre-build dynamic `libgit2` dependency linked
against OpenSSL and LibSSH2 (without gcrypt), and a set of cross-compile
build tools (see
[rationale](https://github.com/hiddeco/golang-with-libgit2#rationale) and
[usage](https://github.co/hiddeco/golang-with-libgit2#usage) for more
detailed information).

The linked set of dependency should solve most known issues around
unsupport private key types, but does not resolve the issues with ECDSA*
and ED25519 hostkeys yet. Solving this requires a newer version of
`libgit2` (`>=1.2.0`), which currently does not seem to work properly
with `git2go/v32`.

Some small changes have been made to the `libgit2` package to address
(future) deprecations.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-09-30 16:36:20 +02:00
Hidde Beydals c7e7b61e34 Use libgit2 from "unstable" / "sid"
We received reports from users no longer being able to clone Git
repositories using libgit2 because of errors during the cloning
attempt: `error: Failed to authenticate SSH session: Unable to extract
public key from private key.`

After an extensive scavenger hunt I was able to pinpoint the issue to
`libssh2` being linked against `libgcrypt` instead of `openssl`. The
problem with this is that the libgcrypt backend in libssh2 contains
a hand written slimmed down ASN.1 parser to read out keys, while the
OpenSSL backend in libssh2 uses OpenSSL, which supports a lot more
formats (and more specifically, most PKCS* formats).

As Debian's bullseye/testing repository has been frozen, and a
backport has not been made available yet, fetching the dependency from
"unstable" seems to be the best option for now, as this has `libssh2`
available including OpenSSL.

Ref: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=668271

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-06-22 13:00:16 +02:00
Hidde Beydals 7e6b88e91c Use Debian instead of Alpine in container image
This commit changes the base image for the build and controller
container images to Debian slim.

Reason for this is that it has proven to be hard to produce working
executables for AMD64, ARM64 and ARMv7 at all times using Alpine,
due to them being dynamically linked and compiled using CGO, and
Alpine having constraints like musl that create an extra barrier,
especially in combination with our exotic set of dependency
constraints.

There are a number of trade-offs we have to live with by doing this,
not limited to:

* An increased build time, the full release pipeline used to take 25-35
  minutes, based on the images we have build for testing purposes this
  seems to have become 35-40 minutes.
* An increased image size of roughly two times the (compressed) size of
  the Alpine based image.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-06-17 16:12:33 +02:00
Hidde Beydals 827509e10f Use `binutils-gold` in builder image
There seems to have been a change in the dependencies that now causes
ARMv7 builds to fail:

```
    sigs.k8s.io/kustomize/kyaml/yaml/merge3=$WORK/b742/_pkg_.a
    sigs.k8s.io/kustomize/kyaml/yaml/internal/k8sgen/pkg/util/errors=$WORK/b678/_pkg_.a
    -importcfg $WORK/b001/importcfg.link -buildmode=exe
-buildid=YHfd11eGufJ7RVGSGz2z/H9JgY3lbjsdhQ8_r06Gz/HiYQEtSgCAIHJ7rrNYN6/YHfd11eGufJ7RVGSGz2z
-extld=gcc $WORK/b001/_pkg_.a
    exit status 1
    -c CGO_ENABLED=1 go build -x -o source-controller main.go]: exit
code: 2
```

After trying various things, including downgrading Go, using
packages from `edge`, using `gcc-go` to get a "grouped" version of
the dependencies, it seems that using `binutils-gold` solves the issue
and produces a working build for all our target architectures.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-06-09 12:59:20 +02:00
Hidde Beydals d3bcc6a66b Update Go to 1.16
This commit updates Go to 1.16, a required change because of the use of
`os.WriteFile` in one of the tests introduced by commit
b5004a93bc.

Normally _just_ this would not justify the change, but given the
introduction of breaking changes (and thereby forcing a MINOR update
anyway), and the various file{system, path} improvements introduced in
Go 1.16 like
[`filepath#WalkDir`](https://golang.org/pkg/path/filepath/#WalkDir),
going ahead with this should be fine.

Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-04-13 16:35:41 +02:00
Hidde Beydals 15ecae636a Use musl and libgit2 packages from v3.13 branch
Signed-off-by: Hidde Beydals <hello@hidde.co>
2021-02-10 22:28:14 +01:00
Stefan Prodan 9764598125
Update Alpine to v3.13
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-02-07 18:53:39 +02:00
Stefan Prodan a24cabb4b9
Fix controller group in Alpine
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>
2021-02-07 18:47:52 +02:00
Philip Laine be5f4cb206 Add newer musl version to second image layer
Signed-off-by: Philip Laine <philip.laine@gmail.com>
2020-12-12 13:11:48 +01:00
Hidde Beydals 3feda81109 Tweak `musl` and `libgit2{-dev}` dependencies
* Use semver tidles to deal with future patch releases
* Install just `libgit2` in runtime container
* Add TODO / explanation for `musl` `1.2.x` dependency

Signed-off-by: Hidde Beydals <hello@hidde.co>
2020-12-10 00:05:58 +01:00
Philip Laine 7945f95180 Install musl edge version
Signed-off-by: Philip Laine <philip.laine@gmail.com>
2020-12-10 00:05:50 +01:00
Hidde Beydals 38e2e58c54 Use semver tidle range for `libgit2-dev` package
Signed-off-by: Hidde Beydals <hello@hidde.co>
2020-12-09 17:00:17 +01:00
Philip Laine 2cb3754953 Add support for gitv2 servers
Signed-off-by: Philip Laine <philip.laine@xenit.se>
2020-12-02 20:18:29 +01:00
stefanprodan f16e5f041a Promote API to v1beta1 2020-09-30 16:11:00 +03:00
stefanprodan d927a1e4aa Publish amd64/arm64 images to GHCR 2020-09-04 13:41:50 +03:00
stefanprodan 4e243ca4de Add minimal nsswitch.conf 2020-08-31 15:21:48 +03:00
Hidde Beydals b75d613f3a Make api package dedicated module
As other controllers depend on source-controller because of the API
package, but this pulls in obsolete dependencies for the controllers.
By publishing the API package as a dedicated module while
using a (local) replace for the project itself, this should be
prevented.
2020-08-17 17:20:11 +02:00
stefanprodan e65e2f0623 Make git package public 2020-07-20 13:10:18 +03:00
stefanprodan 7e2fe14efa Upgrade CRDs to apiextensions.k8s.io/v1 2020-07-20 12:21:34 +03:00
stefanprodan af2cb9c23e Release v0.0.1-beta.2 2020-06-10 11:09:36 +03:00
Hidde Beydals 9498e7dba4 Remove all obsolete packages from Docker image 2020-06-06 19:15:58 +02:00
Hidde Beydals 9ad75d6e52 Remove tar from Docker image 2020-06-06 19:15:57 +02:00
Hidde Beydals 078d0057a8 build: drop openssh-client 2020-05-03 23:07:27 +02:00
stefanprodan 62d3469ce1 build: install tar package 2020-04-28 20:18:58 +03:00
stefanprodan 4b465563b4 build: run controller as a non-root user 2020-04-24 10:14:45 +03:00