gnu: python-babel: Update to 2.7.0.
[guix.git] / gnu / packages / patches / docker-use-fewer-modprobes.patch
blob4e4a45b6ceb6a995e9c5f77bb20bc343f0372b6c
1 This patch makes docker find out whether a filesystem type is supported
2 by trying to mount a filesystem of that type rather than invoking "modprobe".
4 See <https://github.com/moby/moby/pull/38930>.
6 --- docker-18.09.0-checkout/daemon/graphdriver/overlay/overlay.go.orig 1970-01-01 01:00:00.000000000 +0100
7 +++ docker-18.09.0-checkout/daemon/graphdriver/overlay/overlay.go 2019-03-19 09:16:03.487087490 +0100
8 @@ -8,7 +8,6 @@
9 "io"
10 "io/ioutil"
11 "os"
12 - "os/exec"
13 "path"
14 "path/filepath"
15 "strconv"
16 @@ -201,9 +200,16 @@
19 func supportsOverlay() error {
20 - // We can try to modprobe overlay first before looking at
21 - // proc/filesystems for when overlay is supported
22 - exec.Command("modprobe", "overlay").Run()
23 + // Access overlay filesystem so that Linux loads it (if possible).
24 + mountTarget, err := ioutil.TempDir("", "supportsOverlay")
25 + if err != nil {
26 + logrus.WithField("storage-driver", "overlay2").Error("Could not create temporary directory, so assuming that 'overlay' is not supported.")
27 + return graphdriver.ErrNotSupported
28 + } else {
29 + /* The mounting will fail--after the module has been loaded.*/
30 + defer os.RemoveAll(mountTarget)
31 + unix.Mount("overlay", mountTarget, "overlay", 0, "")
32 + }
34 f, err := os.Open("/proc/filesystems")
35 if err != nil {
36 --- docker-18.09.0-checkout/daemon/graphdriver/overlay2/overlay.go.orig 2019-03-18 23:42:23.728525231 +0100
37 +++ docker-18.09.0-checkout/daemon/graphdriver/overlay2/overlay.go 2019-03-19 08:54:31.411906113 +0100
38 @@ -10,7 +10,6 @@
39 "io"
40 "io/ioutil"
41 "os"
42 - "os/exec"
43 "path"
44 "path/filepath"
45 "strconv"
46 @@ -261,9 +260,16 @@
49 func supportsOverlay() error {
50 - // We can try to modprobe overlay first before looking at
51 - // proc/filesystems for when overlay is supported
52 - exec.Command("modprobe", "overlay").Run()
53 + // Access overlay filesystem so that Linux loads it (if possible).
54 + mountTarget, err := ioutil.TempDir("", "supportsOverlay2")
55 + if err != nil {
56 + logrus.WithField("storage-driver", "overlay2").Error("Could not create temporary directory, so assuming that 'overlay' is not supported.")
57 + return graphdriver.ErrNotSupported
58 + } else {
59 + /* The mounting will fail--after the module has been loaded.*/
60 + defer os.RemoveAll(mountTarget)
61 + unix.Mount("overlay", mountTarget, "overlay", 0, "")
62 + }
64 f, err := os.Open("/proc/filesystems")
65 if err != nil {
66 --- docker-18.09.0-checkout/daemon/graphdriver/devmapper/deviceset.go.orig 2019-03-19 09:19:16.592844887 +0100
67 +++ docker-18.09.0-checkout/daemon/graphdriver/devmapper/deviceset.go 2019-03-19 09:21:18.019361761 +0100
68 @@ -540,8 +539,14 @@
69 return err // error text is descriptive enough
72 - // Check if kernel supports xfs filesystem or not.
73 - exec.Command("modprobe", "xfs").Run()
74 + mountTarget, err := ioutil.TempDir("", "supportsXFS")
75 + if err != nil {
76 + return errors.Wrapf(err, "error checking for xfs support")
77 + } else {
78 + /* The mounting will fail--after the module has been loaded.*/
79 + defer os.RemoveAll(mountTarget)
80 + unix.Mount("none", mountTarget, "xfs", 0, "")
81 + }
83 f, err := os.Open("/proc/filesystems")
84 if err != nil {
85 --- docker-18.09.0-checkout/vendor/github.com/docker/libnetwork/iptables/iptables.go.orig 2019-03-19 09:47:19.430111170 +0100
86 +++ docker-18.09.0-checkout/vendor/github.com/docker/libnetwork/iptables/iptables.go 2019-03-19 10:38:01.445136177 +0100
87 @@ -72,11 +71,12 @@
90 func probe() {
91 - if out, err := exec.Command("modprobe", "-va", "nf_nat").CombinedOutput(); err != nil {
92 - logrus.Warnf("Running modprobe nf_nat failed with message: `%s`, error: %v", strings.TrimSpace(string(out)), err)
93 + path, err := exec.LookPath("iptables")
94 + if err != nil {
95 + return
97 - if out, err := exec.Command("modprobe", "-va", "xt_conntrack").CombinedOutput(); err != nil {
98 - logrus.Warnf("Running modprobe xt_conntrack failed with message: `%s`, error: %v", strings.TrimSpace(string(out)), err)
99 + if out, err := exec.Command(path, "--wait", "-t", "nat", "-L", "-n").CombinedOutput(); err != nil {
100 + logrus.Warnf("Running iptables --wait -t nat -L -n failed with message: `%s`, error: %v", strings.TrimSpace(string(out)), err)
104 --- docker-18.09.0-checkout/vendor/github.com/docker/libnetwork/ns/init_linux.go.orig 2019-03-19 11:23:20.738316699 +0100
105 +++ docker-18.09.0-checkout/vendor/github.com/docker/libnetwork/ns/init_linux.go 2019-03-19 11:27:57.149753073 +0100
106 @@ -76,12 +76,8 @@ func NlHandle() *netlink.Handle {
107 func getSupportedNlFamilies() []int {
108 fams := []int{syscall.NETLINK_ROUTE}
109 // NETLINK_XFRM test
110 - if err := loadXfrmModules(); err != nil {
111 - if checkXfrmSocket() != nil {
112 - logrus.Warnf("Could not load necessary modules for IPSEC rules: %v", err)
113 - } else {
114 - fams = append(fams, syscall.NETLINK_XFRM)
116 + if err := checkXfrmSocket(); err != nil {
117 + logrus.Warnf("Could not load necessary modules for IPSEC rules: %v", err)
118 } else {
119 fams = append(fams, syscall.NETLINK_XFRM)
121 @@ -99,16 +95,6 @@ func getSupportedNlFamilies() []int {
122 return fams
125 -func loadXfrmModules() error {
126 - if out, err := exec.Command("modprobe", "-va", "xfrm_user").CombinedOutput(); err != nil {
127 - return fmt.Errorf("Running modprobe xfrm_user failed with message: `%s`, error: %v", strings.TrimSpace(string(out)), err)
129 - if out, err := exec.Command("modprobe", "-va", "xfrm_algo").CombinedOutput(); err != nil {
130 - return fmt.Errorf("Running modprobe xfrm_algo failed with message: `%s`, error: %v", strings.TrimSpace(string(out)), err)
132 - return nil
135 // API check on required xfrm modules (xfrm_user, xfrm_algo)
136 func checkXfrmSocket() error {
137 fd, err := syscall.Socket(syscall.AF_NETLINK, syscall.SOCK_RAW, syscall.NETLINK_XFRM)