From dfc3904f778996a449ef5199e36fce6cabfb803a Mon Sep 17 00:00:00 2001 From: Shawn Siefkas Date: Wed, 27 Mar 2013 13:29:58 -0500 Subject: [PATCH 1/3] Looking for iptables in PATH --- network.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/network.go b/network.go index 95b5893122..4fcbfb202e 100644 --- a/network.go +++ b/network.go @@ -68,7 +68,11 @@ func networkSize(mask net.IPMask) (int32, error) { // Wrapper around the iptables command func iptables(args ...string) error { - if err := exec.Command("/sbin/iptables", args...).Run(); err != nil { + path, err := exec.LookPath("iptables") + if err != nil { + log.Fatal("command not found: iptables") + } + if err := exec.Command(path, args...).Run(); err != nil { return fmt.Errorf("iptables failed: iptables %v", strings.Join(args, " ")) } return nil From c66d2b6a532c657b554ffa3c80b2cf15e218ee8e Mon Sep 17 00:00:00 2001 From: Shawn Siefkas Date: Thu, 28 Mar 2013 14:30:56 -0500 Subject: [PATCH 2/3] Return error when iptables is not found --- network.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/network.go b/network.go index 4fcbfb202e..1a347c1c18 100644 --- a/network.go +++ b/network.go @@ -70,7 +70,7 @@ func networkSize(mask net.IPMask) (int32, error) { func iptables(args ...string) error { path, err := exec.LookPath("iptables") if err != nil { - log.Fatal("command not found: iptables") + return fmt.Errorf("command not found: iptables") } if err := exec.Command(path, args...).Run(); err != nil { return fmt.Errorf("iptables failed: iptables %v", strings.Join(args, " ")) From 523803d633e3bf7e4076ad41e73daba491da5d40 Mon Sep 17 00:00:00 2001 From: Shawn Siefkas Date: Thu, 28 Mar 2013 14:44:54 -0500 Subject: [PATCH 3/3] Handling iptables() errors more usefully during portmapper setup --- network.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/network.go b/network.go index 1a347c1c18..dd2b3e8bc7 100644 --- a/network.go +++ b/network.go @@ -124,13 +124,13 @@ func (mapper *PortMapper) cleanup() error { func (mapper *PortMapper) setup() error { if err := iptables("-t", "nat", "-N", "DOCKER"); err != nil { - return errors.New("Unable to setup port networking: Failed to create DOCKER chain") + return fmt.Errorf("Failed to create DOCKER chain: %s", err) } if err := iptables("-t", "nat", "-A", "PREROUTING", "-j", "DOCKER"); err != nil { - return errors.New("Unable to setup port networking: Failed to inject docker in PREROUTING chain") + return fmt.Errorf("Failed to inject docker in PREROUTING chain: %s", err) } if err := iptables("-t", "nat", "-A", "OUTPUT", "-j", "DOCKER"); err != nil { - return errors.New("Unable to setup port networking: Failed to inject docker in OUTPUT chain") + return fmt.Errorf("Failed to inject docker in OUTPUT chain: %s", err) } return nil }