Source: crowdsec Source-Version: 1.4.6-8 Severity: serious Tags: patch Hey Cyril,
Currently crowdsec FTBFS with new docker.io upload[1][2] blocking the transition. I have a patch (attached) that gets things building. Since you upload this pretty regularly, would you take care of it? If you're out of time I could do a team upload. Let me know. Thanks! [1]: https://qa.debian.org/excuses.php?package=docker.io [2]: https://ci.debian.net/packages/c/crowdsec/testing/amd64/49715452/ Best, Nilesh
From 6a80242bad27e480156b63dad02a1932bc7f5729 Mon Sep 17 00:00:00 2001 From: Nilesh Patra <nil...@iki.fi> Date: Sun, 28 Jul 2024 12:33:22 +0530 Subject: [PATCH] Fixup for FTBFS with docker 26 --- debian/control | 4 +- ...20-add-patch-to-build-with-docker-26.patch | 122 ++++++++++++++++++ debian/patches/series | 1 + pkg/acquisition/modules/docker/docker.go | 11 +- pkg/acquisition/modules/docker/docker_test.go | 2 +- pkg/metabase/container.go | 13 +- 6 files changed, 139 insertions(+), 14 deletions(-) create mode 100644 debian/patches/0020-add-patch-to-build-with-docker-26.patch diff --git a/debian/control b/debian/control index 94a27ce..798ba8c 100644 --- a/debian/control +++ b/debian/control @@ -24,7 +24,7 @@ Build-Depends: debhelper-compat (= 13), golang-github-crowdsecurity-machineid-dev, golang-github-davecgh-go-spew-dev, golang-github-dghubble-sling-dev, - golang-github-docker-docker-dev, + golang-github-docker-docker-dev (>= 26), golang-github-docker-go-connections-dev, golang-github-enescakir-emoji-dev, golang-github-gin-gonic-gin-dev (>= 1.8.1), @@ -139,7 +139,7 @@ Depends: golang-entgo-ent-dev, golang-github-crowdsecurity-machineid-dev, golang-github-davecgh-go-spew-dev, golang-github-dghubble-sling-dev, - golang-github-docker-docker-dev, + golang-github-docker-docker-dev (>= 26), golang-github-docker-go-connections-dev, golang-github-enescakir-emoji-dev, golang-github-gin-gonic-gin-dev (>= 1.8.1), diff --git a/debian/patches/0020-add-patch-to-build-with-docker-26.patch b/debian/patches/0020-add-patch-to-build-with-docker-26.patch new file mode 100644 index 0000000..4014de7 --- /dev/null +++ b/debian/patches/0020-add-patch-to-build-with-docker-26.patch @@ -0,0 +1,122 @@ +diff --git a/pkg/acquisition/modules/docker/docker.go b/pkg/acquisition/modules/docker/docker.go +index 117eadd..b9619d9 100644 +--- a/pkg/acquisition/modules/docker/docker.go ++++ b/pkg/acquisition/modules/docker/docker.go +@@ -15,6 +15,7 @@ import ( + "github.com/crowdsecurity/crowdsec/pkg/types" + "github.com/crowdsecurity/dlog" + dockerTypes "github.com/docker/docker/api/types" ++ dockerContainer "github.com/docker/docker/api/types/container" + "github.com/docker/docker/client" + + "github.com/pkg/errors" +@@ -55,7 +56,7 @@ type DockerSource struct { + logger *log.Entry + Client client.CommonAPIClient + t *tomb.Tomb +- containerLogsOptions *dockerTypes.ContainerLogsOptions ++ containerLogsOptions *dockerContainer.LogsOptions + } + + type ContainerConfig struct { +@@ -119,7 +120,7 @@ func (d *DockerSource) Configure(Config []byte, logger *log.Entry) error { + d.Config.Since = time.Now().UTC().Format(time.RFC3339) + } + +- d.containerLogsOptions = &dockerTypes.ContainerLogsOptions{ ++ d.containerLogsOptions = &dockerContainer.LogsOptions{ + ShowStdout: d.Config.FollowStdout, + ShowStderr: d.Config.FollowStdErr, + Follow: true, +@@ -170,7 +171,7 @@ func (d *DockerSource) ConfigureByDSN(dsn string, labels map[string]string, logg + return err + } + +- d.containerLogsOptions = &dockerTypes.ContainerLogsOptions{ ++ d.containerLogsOptions = &dockerContainer.LogsOptions{ + ShowStdout: d.Config.FollowStdout, + ShowStderr: d.Config.FollowStdErr, + Follow: false, +@@ -266,7 +267,7 @@ func (d *DockerSource) SupportedModes() []string { + //OneShotAcquisition reads a set of file and returns when done + func (d *DockerSource) OneShotAcquisition(out chan types.Event, t *tomb.Tomb) error { + d.logger.Debug("In oneshot") +- runningContainer, err := d.Client.ContainerList(context.Background(), dockerTypes.ContainerListOptions{}) ++ runningContainer, err := d.Client.ContainerList(context.Background(), dockerContainer.ListOptions{}) + if err != nil { + return err + } +@@ -399,7 +400,7 @@ func (d *DockerSource) WatchContainer(monitChan chan *ContainerConfig, deleteCha + case <-ticker.C: + // to track for garbage collection + runningContainersID := make(map[string]bool) +- runningContainer, err := d.Client.ContainerList(context.Background(), dockerTypes.ContainerListOptions{}) ++ runningContainer, err := d.Client.ContainerList(context.Background(), dockerContainer.ListOptions{}) + if err != nil { + if strings.Contains(strings.ToLower(err.Error()), "cannot connect to the docker daemon at") { + for idx, container := range d.runningContainerState { +diff --git a/pkg/acquisition/modules/docker/docker_test.go b/pkg/acquisition/modules/docker/docker_test.go +index cf6e350..eeaf67a 100644 +--- a/pkg/acquisition/modules/docker/docker_test.go ++++ b/pkg/acquisition/modules/docker/docker_test.go +@@ -216,7 +216,7 @@ container_name_regexp: + + } + +-func (cli *mockDockerCli) ContainerList(ctx context.Context, options dockerTypes.ContainerListOptions) ([]dockerTypes.Container, error) { ++func (cli *mockDockerCli) ContainerList(ctx context.Context, options dockerContainer.ListOptions) ([]dockerTypes.Container, error) { + if readLogs == true { + return []dockerTypes.Container{}, nil + } +diff --git a/pkg/metabase/container.go b/pkg/metabase/container.go +index b53803b..2368a9b 100644 +--- a/pkg/metabase/container.go ++++ b/pkg/metabase/container.go +@@ -5,7 +5,6 @@ import ( + "context" + "fmt" + "runtime" +- "time" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" +@@ -113,7 +112,7 @@ func (c *Container) Create() error { + + func (c *Container) Start() error { + ctx := context.Background() +- if err := c.CLI.ContainerStart(ctx, c.Name, types.ContainerStartOptions{}); err != nil { ++ if err := c.CLI.ContainerStart(ctx, c.Name, container.StartOptions{}); err != nil { + return fmt.Errorf("failed while starting %s : %s", c.ID, err) + } + +@@ -126,7 +125,7 @@ func StartContainer(name string) error { + return fmt.Errorf("failed to create docker client : %s", err) + } + ctx := context.Background() +- if err := cli.ContainerStart(ctx, name, types.ContainerStartOptions{}); err != nil { ++ if err := cli.ContainerStart(ctx, name, container.StartOptions{}); err != nil { + return fmt.Errorf("failed while starting %s : %s", name, err) + } + +@@ -139,8 +138,10 @@ func StopContainer(name string) error { + return fmt.Errorf("failed to create docker client : %s", err) + } + ctx := context.Background() +- var to time.Duration = 20 * time.Second +- if err := cli.ContainerStop(ctx, name, &to); err != nil { ++ timeoutSeconds := 20 ++ var to container.StopOptions ++ to.Timeout = &timeoutSeconds ++ if err := cli.ContainerStop(ctx, name, to); err != nil { + return fmt.Errorf("failed while stopping %s : %s", name, err) + } + log.Printf("container stopped successfully") +@@ -154,7 +155,7 @@ func RemoveContainer(name string) error { + } + ctx := context.Background() + log.Printf("Removing docker metabase %s", name) +- if err := cli.ContainerRemove(ctx, name, types.ContainerRemoveOptions{}); err != nil { ++ if err := cli.ContainerRemove(ctx, name, container.RemoveOptions{}); err != nil { + return fmt.Errorf("failed to remove container %s : %s", name, err) + } + return nil diff --git a/debian/patches/series b/debian/patches/series index 7a725af..8257803 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -13,3 +13,4 @@ 0017-fix-default-acquisition.patch 0018-non-fatal-errors-for-invalid-datasources.patch 0019-disable-unreliable-test-TestStreaming.patch +0020-add-patch-to-build-with-docker-26.patch diff --git a/pkg/acquisition/modules/docker/docker.go b/pkg/acquisition/modules/docker/docker.go index 117eadd..b9619d9 100644 --- a/pkg/acquisition/modules/docker/docker.go +++ b/pkg/acquisition/modules/docker/docker.go @@ -15,6 +15,7 @@ import ( "github.com/crowdsecurity/crowdsec/pkg/types" "github.com/crowdsecurity/dlog" dockerTypes "github.com/docker/docker/api/types" + dockerContainer "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" "github.com/pkg/errors" @@ -55,7 +56,7 @@ type DockerSource struct { logger *log.Entry Client client.CommonAPIClient t *tomb.Tomb - containerLogsOptions *dockerTypes.ContainerLogsOptions + containerLogsOptions *dockerContainer.LogsOptions } type ContainerConfig struct { @@ -119,7 +120,7 @@ func (d *DockerSource) Configure(Config []byte, logger *log.Entry) error { d.Config.Since = time.Now().UTC().Format(time.RFC3339) } - d.containerLogsOptions = &dockerTypes.ContainerLogsOptions{ + d.containerLogsOptions = &dockerContainer.LogsOptions{ ShowStdout: d.Config.FollowStdout, ShowStderr: d.Config.FollowStdErr, Follow: true, @@ -170,7 +171,7 @@ func (d *DockerSource) ConfigureByDSN(dsn string, labels map[string]string, logg return err } - d.containerLogsOptions = &dockerTypes.ContainerLogsOptions{ + d.containerLogsOptions = &dockerContainer.LogsOptions{ ShowStdout: d.Config.FollowStdout, ShowStderr: d.Config.FollowStdErr, Follow: false, @@ -266,7 +267,7 @@ func (d *DockerSource) SupportedModes() []string { //OneShotAcquisition reads a set of file and returns when done func (d *DockerSource) OneShotAcquisition(out chan types.Event, t *tomb.Tomb) error { d.logger.Debug("In oneshot") - runningContainer, err := d.Client.ContainerList(context.Background(), dockerTypes.ContainerListOptions{}) + runningContainer, err := d.Client.ContainerList(context.Background(), dockerContainer.ListOptions{}) if err != nil { return err } @@ -399,7 +400,7 @@ func (d *DockerSource) WatchContainer(monitChan chan *ContainerConfig, deleteCha case <-ticker.C: // to track for garbage collection runningContainersID := make(map[string]bool) - runningContainer, err := d.Client.ContainerList(context.Background(), dockerTypes.ContainerListOptions{}) + runningContainer, err := d.Client.ContainerList(context.Background(), dockerContainer.ListOptions{}) if err != nil { if strings.Contains(strings.ToLower(err.Error()), "cannot connect to the docker daemon at") { for idx, container := range d.runningContainerState { diff --git a/pkg/acquisition/modules/docker/docker_test.go b/pkg/acquisition/modules/docker/docker_test.go index cf6e350..eeaf67a 100644 --- a/pkg/acquisition/modules/docker/docker_test.go +++ b/pkg/acquisition/modules/docker/docker_test.go @@ -216,7 +216,7 @@ container_name_regexp: } -func (cli *mockDockerCli) ContainerList(ctx context.Context, options dockerTypes.ContainerListOptions) ([]dockerTypes.Container, error) { +func (cli *mockDockerCli) ContainerList(ctx context.Context, options dockerContainer.ListOptions) ([]dockerTypes.Container, error) { if readLogs == true { return []dockerTypes.Container{}, nil } diff --git a/pkg/metabase/container.go b/pkg/metabase/container.go index b53803b..2368a9b 100644 --- a/pkg/metabase/container.go +++ b/pkg/metabase/container.go @@ -5,7 +5,6 @@ import ( "context" "fmt" "runtime" - "time" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" @@ -113,7 +112,7 @@ func (c *Container) Create() error { func (c *Container) Start() error { ctx := context.Background() - if err := c.CLI.ContainerStart(ctx, c.Name, types.ContainerStartOptions{}); err != nil { + if err := c.CLI.ContainerStart(ctx, c.Name, container.StartOptions{}); err != nil { return fmt.Errorf("failed while starting %s : %s", c.ID, err) } @@ -126,7 +125,7 @@ func StartContainer(name string) error { return fmt.Errorf("failed to create docker client : %s", err) } ctx := context.Background() - if err := cli.ContainerStart(ctx, name, types.ContainerStartOptions{}); err != nil { + if err := cli.ContainerStart(ctx, name, container.StartOptions{}); err != nil { return fmt.Errorf("failed while starting %s : %s", name, err) } @@ -139,8 +138,10 @@ func StopContainer(name string) error { return fmt.Errorf("failed to create docker client : %s", err) } ctx := context.Background() - var to time.Duration = 20 * time.Second - if err := cli.ContainerStop(ctx, name, &to); err != nil { + timeoutSeconds := 20 + var to container.StopOptions + to.Timeout = &timeoutSeconds + if err := cli.ContainerStop(ctx, name, to); err != nil { return fmt.Errorf("failed while stopping %s : %s", name, err) } log.Printf("container stopped successfully") @@ -154,7 +155,7 @@ func RemoveContainer(name string) error { } ctx := context.Background() log.Printf("Removing docker metabase %s", name) - if err := cli.ContainerRemove(ctx, name, types.ContainerRemoveOptions{}); err != nil { + if err := cli.ContainerRemove(ctx, name, container.RemoveOptions{}); err != nil { return fmt.Errorf("failed to remove container %s : %s", name, err) } return nil -- 2.43.0
signature.asc
Description: PGP signature