Skip to content

Commit

Permalink
podman: fix build on MIPS
Browse files Browse the repository at this point in the history
Signed-off-by: Daniel Golle <[email protected]>
  • Loading branch information
dangowrt committed Jan 6, 2021
1 parent c563b72 commit e2dd95f
Show file tree
Hide file tree
Showing 3 changed files with 304 additions and 1 deletion.
2 changes: 1 addition & 1 deletion utils/podman/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk

PKG_NAME:=podman
PKG_VERSION:=2.2.1
PKG_RELEASE:=1
PKG_RELEASE:=2
PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE

Expand Down
134 changes: 134 additions & 0 deletions utils/podman/patches/010-Fix-build-for-mips-architecture.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
From ade28a74cc402426518e26550b8e23a1f02af9d5 Mon Sep 17 00:00:00 2001
From: Paul Holzinger <[email protected]>
Date: Mon, 21 Dec 2020 12:30:06 +0100
Subject: [PATCH] Fix build for mips architecture

The signal SIGSTKFLT does not exists on mips architectures.
Also RTMIN and RTMAX are different.

This code is copied from docker.

Signed-off-by: Paul Holzinger <[email protected]>
---
pkg/signal/signal_linux.go | 1 +
pkg/signal/signal_linux_mipsx.go | 106 +++++++++++++++++++++++++++++++
2 files changed, 107 insertions(+)
create mode 100644 pkg/signal/signal_linux_mipsx.go

--- a/pkg/signal/signal_linux.go
+++ b/pkg/signal/signal_linux.go
@@ -1,4 +1,5 @@
// +build linux
+// +build !mips,!mipsle,!mips64,!mips64le

// Signal handling for Linux only.
package signal
--- /dev/null
+++ b/pkg/signal/signal_linux_mipsx.go
@@ -0,0 +1,106 @@
+// +build linux
+// +build mips mipsle mips64 mips64le
+
+// Special signal handling for mips architecture
+package signal
+
+// Copyright 2013-2018 Docker, Inc.
+
+// NOTE: this package has originally been copied from github.com/docker/docker.
+
+import (
+ "os"
+ "os/signal"
+ "syscall"
+
+ "golang.org/x/sys/unix"
+)
+
+const (
+ sigrtmin = 34
+ sigrtmax = 127
+)
+
+// SignalMap is a map of Linux signals.
+var SignalMap = map[string]syscall.Signal{
+ "ABRT": unix.SIGABRT,
+ "ALRM": unix.SIGALRM,
+ "BUS": unix.SIGBUS,
+ "CHLD": unix.SIGCHLD,
+ "CLD": unix.SIGCLD,
+ "CONT": unix.SIGCONT,
+ "FPE": unix.SIGFPE,
+ "HUP": unix.SIGHUP,
+ "ILL": unix.SIGILL,
+ "INT": unix.SIGINT,
+ "IO": unix.SIGIO,
+ "IOT": unix.SIGIOT,
+ "KILL": unix.SIGKILL,
+ "PIPE": unix.SIGPIPE,
+ "POLL": unix.SIGPOLL,
+ "PROF": unix.SIGPROF,
+ "PWR": unix.SIGPWR,
+ "QUIT": unix.SIGQUIT,
+ "SEGV": unix.SIGSEGV,
+ "EMT": unix.SIGEMT,
+ "STOP": unix.SIGSTOP,
+ "SYS": unix.SIGSYS,
+ "TERM": unix.SIGTERM,
+ "TRAP": unix.SIGTRAP,
+ "TSTP": unix.SIGTSTP,
+ "TTIN": unix.SIGTTIN,
+ "TTOU": unix.SIGTTOU,
+ "URG": unix.SIGURG,
+ "USR1": unix.SIGUSR1,
+ "USR2": unix.SIGUSR2,
+ "VTALRM": unix.SIGVTALRM,
+ "WINCH": unix.SIGWINCH,
+ "XCPU": unix.SIGXCPU,
+ "XFSZ": unix.SIGXFSZ,
+ "RTMIN": sigrtmin,
+ "RTMIN+1": sigrtmin + 1,
+ "RTMIN+2": sigrtmin + 2,
+ "RTMIN+3": sigrtmin + 3,
+ "RTMIN+4": sigrtmin + 4,
+ "RTMIN+5": sigrtmin + 5,
+ "RTMIN+6": sigrtmin + 6,
+ "RTMIN+7": sigrtmin + 7,
+ "RTMIN+8": sigrtmin + 8,
+ "RTMIN+9": sigrtmin + 9,
+ "RTMIN+10": sigrtmin + 10,
+ "RTMIN+11": sigrtmin + 11,
+ "RTMIN+12": sigrtmin + 12,
+ "RTMIN+13": sigrtmin + 13,
+ "RTMIN+14": sigrtmin + 14,
+ "RTMIN+15": sigrtmin + 15,
+ "RTMAX-14": sigrtmax - 14,
+ "RTMAX-13": sigrtmax - 13,
+ "RTMAX-12": sigrtmax - 12,
+ "RTMAX-11": sigrtmax - 11,
+ "RTMAX-10": sigrtmax - 10,
+ "RTMAX-9": sigrtmax - 9,
+ "RTMAX-8": sigrtmax - 8,
+ "RTMAX-7": sigrtmax - 7,
+ "RTMAX-6": sigrtmax - 6,
+ "RTMAX-5": sigrtmax - 5,
+ "RTMAX-4": sigrtmax - 4,
+ "RTMAX-3": sigrtmax - 3,
+ "RTMAX-2": sigrtmax - 2,
+ "RTMAX-1": sigrtmax - 1,
+ "RTMAX": sigrtmax,
+}
+
+// CatchAll catches all signals and relays them to the specified channel.
+func CatchAll(sigc chan os.Signal) {
+ handledSigs := make([]os.Signal, 0, len(signalMap))
+ for _, s := range signalMap {
+ handledSigs = append(handledSigs, s)
+ }
+ signal.Notify(sigc, handledSigs...)
+}
+
+// StopCatch stops catching the signals and closes the specified channel.
+func StopCatch(sigc chan os.Signal) {
+ signal.Stop(sigc)
+ close(sigc)
+}
169 changes: 169 additions & 0 deletions utils/podman/patches/020-vendor-containers-psgo-v1.5.2.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
From 21f5154399fc33959a4f3c42e29cade6757015c9 Mon Sep 17 00:00:00 2001
From: Valentin Rothberg <[email protected]>
Date: Tue, 5 Jan 2021 10:44:16 +0100
Subject: [PATCH] vendor containers/[email protected]

Signed-off-by: Valentin Rothberg <[email protected]>
---
go.mod | 2 +-
go.sum | 4 ++--
.../internal/capabilities/capabilities.go | 2 +-
.../containers/psgo/internal/dev/tty.go | 5 ++--
.../containers/psgo/internal/proc/status.go | 2 +-
.../psgo/internal/process/process.go | 4 ++--
vendor/github.com/containers/psgo/psgo.go | 24 +++++++++----------
vendor/modules.txt | 2 +-
8 files changed, 23 insertions(+), 22 deletions(-)

--- a/go.mod
+++ b/go.mod
@@ -14,7 +14,7 @@ require (
github.com/containers/common v0.29.0
github.com/containers/conmon v2.0.20+incompatible
github.com/containers/image/v5 v5.9.0
- github.com/containers/psgo v1.5.1
+ github.com/containers/psgo v1.5.2
github.com/containers/storage v1.24.1
github.com/coreos/go-systemd/v22 v22.1.0
github.com/cri-o/ocicni v0.2.1-0.20201102180012-75c612fda1a2
--- a/go.sum
+++ b/go.sum
@@ -109,8 +109,8 @@ github.com/containers/libtrust v0.0.0-20
github.com/containers/libtrust v0.0.0-20190913040956-14b96171aa3b/go.mod h1:9rfv8iPl1ZP7aqh9YA68wnZv2NUDbXdcdPHVz0pFbPY=
github.com/containers/ocicrypt v1.0.3 h1:vYgl+RZ9Q3DPMuTfxmN+qp0X2Bj52uuY2vnt6GzVe1c=
github.com/containers/ocicrypt v1.0.3/go.mod h1:CUBa+8MRNL/VkpxYIpaMtgn1WgXGyvPQj8jcy0EVG6g=
-github.com/containers/psgo v1.5.1 h1:MQNb7FLbXqBdqz6u4lI2QWizVz4RSTzs1+Nk9XT1iVA=
-github.com/containers/psgo v1.5.1/go.mod h1:2ubh0SsreMZjSXW1Hif58JrEcFudQyIy9EzPUWfawVU=
+github.com/containers/psgo v1.5.2 h1:3aoozst/GIwsrr/5jnFy3FrJay98uujPCu9lTuSZ/Cw=
+github.com/containers/psgo v1.5.2/go.mod h1:2ubh0SsreMZjSXW1Hif58JrEcFudQyIy9EzPUWfawVU=
github.com/containers/storage v1.23.6/go.mod h1:haFs0HRowKwyzvWEx9EgI3WsL8XCSnBDb5f8P5CAxJY=
github.com/containers/storage v1.23.7/go.mod h1:cUT2zHjtx+WlVri30obWmM2gpqpi8jfPsmIzP1TVpEI=
github.com/containers/storage v1.24.0 h1:Fo2LkF7tkMLmo38sTZ/G8wHjcn8JfUFPfyTxM4WwMfk=
--- a/vendor/github.com/containers/psgo/internal/capabilities/capabilities.go
+++ b/vendor/github.com/containers/psgo/internal/capabilities/capabilities.go
@@ -13,7 +13,7 @@
// limitations under the License.

// Package capabilities provides a mapping from common kernel bit masks to the
-// alphanumerical represenation of kernel capabilities. See capabilities(7)
+// alphanumerical representation of kernel capabilities. See capabilities(7)
// for additional information.
package capabilities

--- a/vendor/github.com/containers/psgo/internal/dev/tty.go
+++ b/vendor/github.com/containers/psgo/internal/dev/tty.go
@@ -113,8 +113,9 @@ func TTYs() (*[]TTY, error) {
}
s := fi.Sys().(*syscall.Stat_t)
t := TTY{
- Minor: minDevNum(s.Rdev),
- Major: majDevNum(s.Rdev),
+ // Rdev is type uint32 on mips arch so we have to cast to uint64
+ Minor: minDevNum(uint64(s.Rdev)),
+ Major: majDevNum(uint64(s.Rdev)),
Path: dev,
}
ttys = append(ttys, t)
--- a/vendor/github.com/containers/psgo/internal/proc/status.go
+++ b/vendor/github.com/containers/psgo/internal/proc/status.go
@@ -24,7 +24,7 @@ import (
"github.com/pkg/errors"
)

-// Status is a direct translation of a `/proc/[pid]/status`, wich provides much
+// Status is a direct translation of a `/proc/[pid]/status`, which provides much
// of the information in /proc/[pid]/stat and /proc/[pid]/statm in a format
// that's easier for humans to parse.
type Status struct {
--- a/vendor/github.com/containers/psgo/internal/process/process.go
+++ b/vendor/github.com/containers/psgo/internal/process/process.go
@@ -31,9 +31,9 @@ type Process struct {
Pid string
// Stat contains data from /proc/$pid/stat.
Stat proc.Stat
- // Status containes data from /proc/$pid/status.
+ // Status contains data from /proc/$pid/status.
Status proc.Status
- // CmdLine containes data from /proc/$pid/cmdline.
+ // CmdLine contains data from /proc/$pid/cmdline.
CmdLine []string
// Label containers data from /proc/$pid/attr/current.
Label string
--- a/vendor/github.com/containers/psgo/psgo.go
+++ b/vendor/github.com/containers/psgo/psgo.go
@@ -482,7 +482,7 @@ func JoinNamespaceAndProcessInfoByPidsWi
// catch race conditions
continue
}
- return nil, errors.Wrapf(err, "error extracing PID namespace")
+ return nil, errors.Wrapf(err, "error extracting PID namespace")
}
if _, exists := nsMap[ns]; !exists {
nsMap[ns] = true
@@ -759,7 +759,7 @@ func processVSZ(p *process.Process, ctx
}

// parseCAP parses cap (a string bit mask) and returns the associated set of
-// capabilities. If all capabilties are set, "full" is returned. If no
+// capabilities. If all capabilities are set, "full" is returned. If no
// capability is enabled, "none" is returned.
func parseCAP(cap string) (string, error) {
mask, err := strconv.ParseUint(cap, 16, 64)
@@ -777,36 +777,36 @@ func parseCAP(cap string) (string, error
return strings.Join(caps, ","), nil
}

-// processCAPAMB returns the set of ambient capabilties associated with
-// process p. If all capabilties are set, "full" is returned. If no
+// processCAPAMB returns the set of ambient capabilities associated with
+// process p. If all capabilities are set, "full" is returned. If no
// capability is enabled, "none" is returned.
func processCAPAMB(p *process.Process, ctx *psContext) (string, error) {
return parseCAP(p.Status.CapAmb)
}

-// processCAPINH returns the set of inheritable capabilties associated with
-// process p. If all capabilties are set, "full" is returned. If no
+// processCAPINH returns the set of inheritable capabilities associated with
+// process p. If all capabilities are set, "full" is returned. If no
// capability is enabled, "none" is returned.
func processCAPINH(p *process.Process, ctx *psContext) (string, error) {
return parseCAP(p.Status.CapInh)
}

-// processCAPPRM returns the set of permitted capabilties associated with
-// process p. If all capabilties are set, "full" is returned. If no
+// processCAPPRM returns the set of permitted capabilities associated with
+// process p. If all capabilities are set, "full" is returned. If no
// capability is enabled, "none" is returned.
func processCAPPRM(p *process.Process, ctx *psContext) (string, error) {
return parseCAP(p.Status.CapPrm)
}

-// processCAPEFF returns the set of effective capabilties associated with
-// process p. If all capabilties are set, "full" is returned. If no
+// processCAPEFF returns the set of effective capabilities associated with
+// process p. If all capabilities are set, "full" is returned. If no
// capability is enabled, "none" is returned.
func processCAPEFF(p *process.Process, ctx *psContext) (string, error) {
return parseCAP(p.Status.CapEff)
}

-// processCAPBND returns the set of bounding capabilties associated with
-// process p. If all capabilties are set, "full" is returned. If no
+// processCAPBND returns the set of bounding capabilities associated with
+// process p. If all capabilities are set, "full" is returned. If no
// capability is enabled, "none" is returned.
func processCAPBND(p *process.Process, ctx *psContext) (string, error) {
return parseCAP(p.Status.CapBnd)
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -160,7 +160,7 @@ github.com/containers/ocicrypt/keywrap/p
github.com/containers/ocicrypt/keywrap/pkcs7
github.com/containers/ocicrypt/spec
github.com/containers/ocicrypt/utils
-# github.com/containers/psgo v1.5.1
+# github.com/containers/psgo v1.5.2
github.com/containers/psgo
github.com/containers/psgo/internal/capabilities
github.com/containers/psgo/internal/cgroups

0 comments on commit e2dd95f

Please sign in to comment.