This is the golang guest utilities for XenServer
xe-guest-utilities.git/xenstoreclient
xe-guest-utilities.git/xenstore
xe-guest-utilities.git/xe-daemon
Go development environment is required to build the guest utilities.
After commit 94942cd597e guest utilities not support version <= 1.11, with modern go versions (later than 1.11) we can build with below guides:
In this case, project and source files are expected to put in GOPATH/src
GOROOT
In newer versions, we don't need to set up the $GOROOT variable unless you use different Go versions
GOPATH
Go gets librarys from the directory GOPATH
, so for the build to work, you need read/write permissions there. With GO111MODULE
disabled, $GOPATH directory are expected to has below hierarchy.
└── src
├── github.com
│ └── xenserver
│ └── xe-guest-utilities
|
└── golang.org
└── x
└── sys
GO111MODULE
Set GO111MODULE
disabled
e.g.
let's say your project directory is /home/xe-guest-utilities-7.30.0
export GOPATH=/home/xe-guest-utilities-7.30.0
export GO111MODULE=off
git clone https://github.com/xenserver/xe-guest-utilities.git $GOPATH/src/github.com/xenserver/xe-guest-utilities
This project uses the golang.org/x/sys/unix
library, you can use different methods to set the external library you use in your source code
go get -u golang.org/x/sys@latest
or
git clone git@github.com:golang/sys.git $GOPATH/src/golang.org/x/sys
cd $GOPATH/src/github.com/xenserver/xe-guest-utilities
now you can make build
or make
. Then you can get resulting files in build/
, same layout as explained belowbuild/obj
build/stage
are all required files and where they go when installed.build/dist
is a tarball with all files,symlinks and permissions.In this case, we can place our project outside $GOPATH
$PATH
GOPATH
Go gets librarys from the GOPATH
, so for this to work, you need read/write permissions there.If in doubt, set GOPATH
to a temporary location, ie: export GOPATH=$(pwd)
sets GOPATH
to the local folder
GO111MODULE
With GO111MODULE
enabled, go projects are no longer confined to $GOPATH, instead it use go.mod to keep track fo each package and it's version
e.g. let's say your project directory is /home/xe-guest-utilities-7.30.0
# export GOPATH=/home/xe-guest-utilities-7.30.0
# export GO111MODULE=on
Get the project
git clone https://github.com/xenserver/xe-guest-utilities.git $GOPATH/xe-guest-utilities`
Set external library
This project uses the golang.org/x/sys/unix
library, you can use different method to set the external library
Download to $GOPATH
manually
git clone git@github.com:golang/sys.git $GOPATH/golang.org/x/sys
And then add below content into go.mod
before require golang.org/x/sys v0.0.0-20210414055047-fe65e336abe0
to manually point to the correct place to get module from the specific place.
replace golang.org/x/sys v0.0.0-20210414055047-fe65e336abe0 => ../golang.org/x/sys
Then sync the vendor directory by go mod vendor
Use go module tool to get
Sync the vendor directory by go mod vendor
In this process go will download golang.org/x/sys
of the version v0.0.0-20210414055047-fe65e336abe0
to the the vendor directory and refresh vendor/modules.txt
Go into the right directory cd $GOPATH/xe-guest-utilities/
, then you can use make build
or make
.
resulting files are in build/
, same layout as explained above