ganto/copr-lxc4

lxd: x86_64 build failure on Fedora >=33

ganto opened this issue · 3 comments

ganto commented

The LXD spec file for >=lxd-4.3 fails to build on x86_64 for >=Fedora-33 (1.15-1.fc33/1.15.1-1.fc34). Unfortunately there is no clear build failure but it would always abort when trying to build gopkg.in/fsnotify.v0 as part of the lxd binary:

[...]
+ export GOPATH=/builddir/build/BUILD/lxd-4.5/_output:/builddir/build/BUILD/lxd-4.5:/usr/share/gocode
+ GOPATH=/builddir/build/BUILD/lxd-4.5/_output:/builddir/build/BUILD/lxd-4.5:/usr/share/gocode
+ unset LDFLAGS
+ export 'CGO_CFLAGS=-I/builddir/build/BUILD/lxd-4.5/_dist/deps/sqlite/ -I/builddir/build/BUILD/lxd-4.5/_dist/deps/libco/ -I/builddir/build/BUILD/lxd-4.5/_dist/deps/raft/include/ -I/builddir/build/BUILD/lxd-4.5/_dist/deps/dqlite/include/'
+ CGO_CFLAGS='-I/builddir/build/BUILD/lxd-4.5/_dist/deps/sqlite/ -I/builddir/build/BUILD/lxd-4.5/_dist/deps/libco/ -I/builddir/build/BUILD/lxd-4.5/_dist/deps/raft/include/ -I/builddir/build/BUILD/lxd-4.5/_dist/deps/dqlite/include/'
+ export 'CGO_LDFLAGS=-L/builddir/build/BUILD/lxd-4.5/_dist/deps/sqlite/.libs/ -L/builddir/build/BUILD/lxd-4.5/_dist/deps/libco/ -L/builddir/build/BUILD/lxd-4.5/_dist/deps/raft/.libs/ -L/builddir/build/BUILD/lxd-4.5/_dist/deps/dqlite/.libs/ -Wl,-rpath,/usr/lib64/lxd'
+ CGO_LDFLAGS='-L/builddir/build/BUILD/lxd-4.5/_dist/deps/sqlite/.libs/ -L/builddir/build/BUILD/lxd-4.5/_dist/deps/libco/ -L/builddir/build/BUILD/lxd-4.5/_dist/deps/raft/.libs/ -L/builddir/build/BUILD/lxd-4.5/_dist/deps/dqlite/.libs/ -Wl,-rpath,/usr/lib64/lxd'
+ export LD_LIBRARY_PATH=/builddir/build/BUILD/lxd-4.5/_dist/deps/sqlite/.libs/:/builddir/build/BUILD/lxd-4.5/_dist/deps/libco/:/builddir/build/BUILD/lxd-4.5/_dist/deps/raft/.libs/:/builddir/build/BUILD/lxd-4.5/_dist/deps/dqlite/.libs/
+ LD_LIBRARY_PATH=/builddir/build/BUILD/lxd-4.5/_dist/deps/sqlite/.libs/:/builddir/build/BUILD/lxd-4.5/_dist/deps/libco/:/builddir/build/BUILD/lxd-4.5/_dist/deps/raft/.libs/:/builddir/build/BUILD/lxd-4.5/_dist/deps/dqlite/.libs/
+ export CGO_LDFLAGS_ALLOW=-Wl,-wrap,pthread_create
+ CGO_LDFLAGS_ALLOW=-Wl,-wrap,pthread_create
+ for cmd in lxd lxc fuidshift lxd-benchmark lxc-to-lxd
+ BUILDTAGS=libsqlite3
++ tr -d ' \n'
++ od -An -tx1
++ head -c20 /dev/urandom
+ GOPATH=/builddir/build/BUILD/lxd-4.5/_build:/builddir/build/BUILD/lxd-4.5/_output:/builddir/build/BUILD/lxd-4.5:/usr/share/gocode:/usr/share/gocode
+ GO111MODULE=off
+ go build -buildmode pie -compiler gc '-tags=rpm_crashtraceback libsqlite3' -ldflags '-X github.com/lxc/lxd/version=4.5 -B 0x5506634c95116b74f8e1c1973a65b4f40f62ef71 -extldflags '\''-Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld  '\''' -a -v -x -o /builddir/build/BUILD/lxd-4.5/_build/bin/lxd github.com/lxc/lxd/lxd

[...]

cd /builddir/build/BUILD/lxd-4.5/_build/src/github.com/lxc/lxd/vendor/gopkg.in/fsnotify.v0
/usr/lib/golang/pkg/tool/linux_amd64/compile -o $WORK/b356/_pkg_.a -trimpath "$WORK/b356=>" -shared -p github.com/lxc/lxd/vendor/gopkg.in/fsnotify.v0 -complete -installsuffix shared -buildid sOHmd1iezqk94woZQgxu/sOHmd1iezqk94woZQgxu -goversion go1.15 -D "" -importcfg $WORK/b356/importcfg -pack ./fsnotify.go ./fsnotify_linux.go
/usr/lib/golang/pkg/tool/linux_amd64/buildid -w $WORK/b356/_pkg_.a # internal
cp $WORK/b356/_pkg_.a /builddir/.cache/go-build/3c/3cd82c06e247b55e6ad8532d1940185e004dcc1d061c61281093224c12360dae-d # internal
/usr/lib/golang/pkg/tool/linux_amd64/buildid -w $WORK/b342/_pkg_.a # internal
cp $WORK/b342/_pkg_.a /builddir/.cache/go-build/2f/2f05984d84a6868e3653c22b463505a9aeece7c6a6acf447cd1cae7cd5b70bc7-d # internal
error: Bad exit status from /var/tmp/rpm-tmp.22FGgw (%build)
    Setting %{thisgofilelist} = devel.file-list
    Setting %{currentgoipath} = github.com/lxc/lxd
    Setting %{currentgosourcedir} = /builddir/build/BUILD/lxd-4.5
    Setting %{currentgofilelist} = devel.file-list
    Setting %{currentversion} = 4.5
    Setting %{currentgoldflags} =  -X github.com/lxc/lxd/version=4.5
    Bad exit status from /var/tmp/rpm-tmp.22FGgw (%build)

See e.g. ganto/lxc4: COPR build 01652912 - build.log.gz

On Fedora 31/32 (using golang-1.13.14-1.fc31 and golang-1.14.7-1.fc32) the x86_64 build is successful. Also on i686 Fedora >=33 with >=golang-1.15.

ganto commented

When building locally it fails at a slightly different place. Again not very verbose:

cd /builddir/build/BUILD/lxd-4.5/_build/src/github.com/lxc/lxd/lxd/endpoints
/usr/lib/golang/pkg/tool/linux_amd64/compile -o $WORK/b247/_pkg_.a -trimpath "$WORK/b247=>" -shared -p github.com/lxc/lxd/lxd/endpoints -complete -installsuffix shared -buildid acgKUCbEdBeHjOz1NGbQ/acgKUCbEdBeHjOz1NGbQ -goversion go1.15 -D "" -importcfg $WORK/b247/importcfg -pack ./cluster.go ./devlxd.go ./endpoints.go ./local.go ./network.go ./pprof.go ./socket.go
/usr/lib/golang/pkg/tool/linux_amd64/buildid -w $WORK/b211/_pkg_.a # internal
cp $WORK/b211/_pkg_.a /builddir/.cache/go-build/6e/6e32c9e537a90bd34d2fdee9895d46e1221452afccb230ffc4f5f51b0188ed6b-d # internal
/usr/lib/golang/pkg/tool/linux_amd64/buildid -w $WORK/b247/_pkg_.a # internal
cp $WORK/b247/_pkg_.a /builddir/.cache/go-build/f9/f9384252959028ff4f813a711df4cda49f17e53ad10afc5a73ea356406dc6588-d # internal
error: Bad exit status from /var/tmp/rpm-tmp.zFbJ2u (%build)
    Setting %{thisgofilelist} = devel.file-list
    Setting %{currentgoipath} = github.com/lxc/lxd
    Setting %{currentgosourcedir} = /builddir/build/BUILD/lxd-4.5
    Setting %{currentgofilelist} = devel.file-list
    Setting %{currentversion} = 4.5
    Setting %{currentgoldflags} =  -X github.com/lxc/lxd/version=4.5
    Bad exit status from /var/tmp/rpm-tmp.zFbJ2u (%build)

I guess the issue must be hidden somewhere else...

ganto commented

I guess I found the issue somewhere completely else:

TERM='dumb' gcc -I . -fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=$WORK/b189=/tmp/go-build -gno-record-gcc-switches -o $WORK/b189/_cgo_.o $WORK/b189/_cgo_main.o $WORK/b189/_x001.o $WORK/b189/_x002.o $WORK/b189/_x003.o -L/builddir/build/BUILD/lxd-4.5/_dist/deps/sqlite/.libs/ -L/builddir/build/BUILD/lxd-4.5/_dist/deps/libco/ -L/builddir/build/BUILD/lxd-4.5/_dist/deps/raft/.libs/ -L/builddir/build/BUILD/lxd-4.5/_dist/deps/dqlite/.libs/ -Wl,-rpath,/usr/lib64/lxd -lsqlite3 -lraft -lco -ldqlite
# github.com/lxc/lxd/vendor/github.com/canonical/go-dqlite/internal/bindings
/usr/bin/ld: /builddir/build/BUILD/lxd-4.5/_dist/deps/dqlite/.libs//libdqlite.so: undefined reference to `co_swap_function'
collect2: error: ld returned 1 exit status

Why the heck doesn't it abort when the linking fails... Needs more investigation.

ganto commented

With help of upstream I was able to sort out the issue by using the latest version of dqlite/go-dqlite which completely got rid of libco.

lxd-4.5-0.2 is now available for Fedora 33 and Rawhide 😄