[lxc-devel] [lxd/master] network: Allow starting LXD without dnsmasq

stgraber on Github lxc-bot at linuxcontainers.org
Fri Aug 18 19:56:23 UTC 2017


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 370 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20170818/312f9b62/attachment.bin>
-------------- next part --------------
From 1b83c2a137e8a30430bdbef09ab1ba54be01d906 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Fri, 18 Aug 2017 15:55:45 -0400
Subject: [PATCH] network: Allow starting LXD without dnsmasq
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #3678

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/main_daemon.go | 2 +-
 lxd/main_init.go   | 6 ++++++
 lxd/networks.go    | 7 +++++++
 test/main.sh       | 2 +-
 4 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/lxd/main_daemon.go b/lxd/main_daemon.go
index 7195e3551..b8454a80b 100644
--- a/lxd/main_daemon.go
+++ b/lxd/main_daemon.go
@@ -33,7 +33,7 @@ func cmdDaemon() error {
 		go memProfiler(*argMemProfile)
 	}
 
-	neededPrograms := []string{"dnsmasq", "setfacl", "rsync", "tar", "unsquashfs", "xz"}
+	neededPrograms := []string{"setfacl", "rsync", "tar", "unsquashfs", "xz"}
 	for _, p := range neededPrograms {
 		_, err := exec.LookPath(p)
 		if err != nil {
diff --git a/lxd/main_init.go b/lxd/main_init.go
index 9c9628b99..c74ef2919 100644
--- a/lxd/main_init.go
+++ b/lxd/main_init.go
@@ -151,6 +151,11 @@ func (cmd *CmdInit) fillDataInteractive(data *cmdInitData, client lxd.ContainerS
 	imagesAutoUpdate := cmd.askImages()
 	bridge := cmd.askBridge(client)
 
+	_, err = exec.LookPath("dnsmasq")
+	if err != nil && bridge != nil {
+		return fmt.Errorf("LXD managed bridges require \"dnsmasq\". Install it and try again.")
+	}
+
 	err = cmd.fillDataWithStorage(data, storage, existingPools)
 	if err != nil {
 		return err
@@ -884,6 +889,7 @@ func (cmd *CmdInit) askBridge(client lxd.ContainerServer) *cmdInitBridgeParams {
 	if !cmd.Context.AskBool("Would you like to create a new network bridge (yes/no) [default=yes]? ", "yes") {
 		return nil
 	}
+
 	bridge := &cmdInitBridgeParams{}
 	for {
 		bridge.Name = cmd.Context.AskString("What should the new bridge be called [default=lxdbr0]? ", "lxdbr0", networkValidName)
diff --git a/lxd/networks.go b/lxd/networks.go
index a567de196..0330c1a4d 100644
--- a/lxd/networks.go
+++ b/lxd/networks.go
@@ -8,6 +8,7 @@ import (
 	"net"
 	"net/http"
 	"os"
+	"os/exec"
 	"strconv"
 	"strings"
 
@@ -1213,6 +1214,12 @@ func (n *network) Start() error {
 			break
 		}
 
+		// Check for dnsmasq
+		_, err := exec.LookPath("dnsmasq")
+		if err != nil {
+			return fmt.Errorf("dnsmasq is required for LXD managed bridges.")
+		}
+
 		// Start dnsmasq (occasionally races, try a few times)
 		output, err := shared.TryRunCommand(dnsmasqCmd[0], dnsmasqCmd[1:]...)
 		if err != nil {
diff --git a/test/main.sh b/test/main.sh
index 1f38cd70d..6204d78a2 100755
--- a/test/main.sh
+++ b/test/main.sh
@@ -37,7 +37,7 @@ import_subdir_files() {
 import_subdir_files includes
 
 echo "==> Checking for dependencies"
-check_dependencies lxd lxc curl jq git xgettext sqlite3 msgmerge msgfmt shuf setfacl uuidgen
+check_dependencies lxd lxc curl dnsmasq jq git xgettext sqlite3 msgmerge msgfmt shuf setfacl uuidgen
 
 if [ "${USER:-'root'}" != "root" ]; then
   echo "The testsuite must be run as root." >&2


More information about the lxc-devel mailing list