--- Begin Message ---
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
--- End Message ---