[lxc-devel] [lxd/master] index.md build from source improvements

danielrobbins on Github lxc-bot at linuxcontainers.org
Tue Dec 10 15:50:09 UTC 2019


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 447 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20191210/dc9b7d5e/attachment.bin>
-------------- next part --------------
From 7666df6f44ec920f49f36dc006359c3aae960dad Mon Sep 17 00:00:00 2001
From: Daniel Robbins <drobbins at funtoo.org>
Date: Mon, 9 Dec 2019 21:14:40 -0700
Subject: [PATCH 1/2] Improve build from source instructions

The instructions for building from source are very minimal and didn't mention how to build official releases of LXD. This attempts to fix this.
---
 doc/index.md | 42 ++++++++++++++++++++++++++++++++----------
 1 file changed, 32 insertions(+), 10 deletions(-)

diff --git a/doc/index.md b/doc/index.md
index d47730bd9b..650c583ddd 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -68,22 +68,32 @@ To run the testsuite, you'll also need:
 sudo apt install curl gettext jq sqlite3 uuid-runtime bzr socat
 ```
 
-
-### Building the tools
-LXD consists of two binaries, a client called `lxc` and a server called `lxd`.
-These live in the source tree in the `lxc/` and `lxd/` dirs, respectively.
-To get the code, set up your go environment:
+### From Source: Building the latest version
+To build the latest version of the code, perform the following steps:
 
 ```bash
 mkdir -p ~/go
 export GOPATH=~/go
+go get -d -v github.com/lxc/lxd/lxd
+cd $GOPATH/src/github.com/lxc/lxd
+make deps
+export CGO_CFLAGS="${CGO_CFLAGS} -I${GOPATH}/deps/sqlite/ -I${GOPATH}/deps/dqlite/include/ -I${GOPATH}/deps/raft/include/ -I${GOPATH}/deps/libco/"
+export CGO_LDFLAGS="${CGO_LDFLAGS} -L${GOPATH}/deps/sqlite/.libs/ -L${GOPATH}/deps/dqlite/.libs/ -L${GOPATH}/deps/raft/.libs -L${GOPATH}/deps/libco/"
+export LD_LIBRARY_PATH="${GOPATH}/deps/sqlite/.libs/:${GOPATH}/deps/dqlite/.libs/:${GOPATH}/deps/raft/.libs:${GOPATH}/deps/libco/:${LD_LIBRARY_PATH}"
+make
 ```
 
-And then download it as usual:
+The build process will use `go get` and `git clone` to grab all necessary dependencies needed for building.
+
+### From Source: Building a Release
+
+To build an official release of LXD, download and extract a release tarball, and then set up GOPATH to point to the
+`_dist` directory inside it, which is configured to be used as a GOPATH and contains snapshots of all necessary sources. LXD
+will then build using these snapshots rather than grabbing 'live' sources using `go get` and `git clone`:
 
 ```bash
-go get -d -v github.com/lxc/lxd/lxd
-cd $GOPATH/src/github.com/lxc/lxd
+cd lxd-3.18
+export GOPATH=$(pwd)/_dist
 make deps
 export CGO_CFLAGS="${CGO_CFLAGS} -I${GOPATH}/deps/sqlite/ -I${GOPATH}/deps/dqlite/include/ -I${GOPATH}/deps/raft/include/ -I${GOPATH}/deps/libco/"
 export CGO_LDFLAGS="${CGO_LDFLAGS} -L${GOPATH}/deps/sqlite/.libs/ -L${GOPATH}/deps/dqlite/.libs/ -L${GOPATH}/deps/raft/.libs -L${GOPATH}/deps/libco/"
@@ -91,8 +101,20 @@ export LD_LIBRARY_PATH="${GOPATH}/deps/sqlite/.libs/:${GOPATH}/deps/dqlite/.libs
 make
 ```
 
-...which will give you two binaries in `$GOPATH/bin`, `lxd` the daemon binary,
-and `lxc` a command line client to that daemon.
+### From Source: Installing
+
+When the build process completes,`$GOPATH/bin` will contain the `lxd` daemon, the `lxc` binary, as well as other tools.
+Binaries can be copied to appropriate locations in your path. The `$GOPATH/deps` directory will contain versions of
+requisite libraries that will also need to be installed in order for LXD to function. These libraries can be installed
+using the following commands:
+
+```bash
+cd "${GOPATH}/deps/sqlite" && make DESTDIR=/ libdir=/usr/lib install
+cd "${GOPATH}/deps/raft" && make DESTDIR=/ libdir=/usr/lib install
+cd "${GOPATH}/deps/libco" && make DESTDIR=/ LIBDIR=/usr/lib install
+cd "${GOPATH}/deps/dqlite" && make DESTDIR=/ libdir=/usr/lib install
+```
+`DESTDIR` and/or `libdir`/`LIBDIR` can be adjusted as necessary to install the libraries to a suitable library path.
 
 ### Machine Setup
 You'll need sub{u,g}ids for root, so that LXD can create the unprivileged

From 0966984cfa0942445741ed64839ec1d23a45063b Mon Sep 17 00:00:00 2001
From: Daniel Robbins <drobbins at funtoo.org>
Date: Tue, 10 Dec 2019 08:48:46 -0700
Subject: [PATCH 2/2] A small fix for libco install -- there is an implicit
 /usr

---
 doc/index.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/doc/index.md b/doc/index.md
index 650c583ddd..fb2ff43864 100644
--- a/doc/index.md
+++ b/doc/index.md
@@ -111,8 +111,9 @@ using the following commands:
 ```bash
 cd "${GOPATH}/deps/sqlite" && make DESTDIR=/ libdir=/usr/lib install
 cd "${GOPATH}/deps/raft" && make DESTDIR=/ libdir=/usr/lib install
-cd "${GOPATH}/deps/libco" && make DESTDIR=/ LIBDIR=/usr/lib install
 cd "${GOPATH}/deps/dqlite" && make DESTDIR=/ libdir=/usr/lib install
+# Note that the libco make file is a bit different than the rest:
+cd "${GOPATH}/deps/libco" && make DESTDIR=/ LIBDIR=lib install
 ```
 `DESTDIR` and/or `libdir`/`LIBDIR` can be adjusted as necessary to install the libraries to a suitable library path.
 


More information about the lxc-devel mailing list