[libvirt] Building on Solaris 11 Express

Richard Laager rlaager at wiktel.com
Sun Jun 5 02:57:07 UTC 2011


On Fri, 2011-06-03 at 09:11 +0200, Matthias Bolte wrote:
> That might be the problem. I don't have a Solaris at hand right now to
> test it so here is a speculative patch for this.

I tested this patch. I'll discuss that first and then recount the
problems I experienced along the way.

The patch seems to achieve the desired effect. libvirtd starts up as the
user xvm. (That said, with Oracle dropping the xvm feature, I'm not sure
if this is better than just running as root.)

VirtualBox (and VBoxSVC) were crashing with "Memory fault", apparently
because they couldn't create /.VirtualBox (xvm's ~ is /). Once I created
that directory (and chown'ed/chgrp'ed it to xvm), I could start VBoxSVC.
From there, virsh connects. It seems to intermittently have problems;
I'm trying to reproduce that issue before I can go much further.

For this testing, I thought it'd be good to use a git checkout, as we
had previously discussed. I was hung up for a while because the gnulib
git repository was down. Now it seems to be back up, so I'm trying
again. Unfortunately, I'm having a number of build issues:


1) I only have gettext 0.16, so I made these changes:

diff --git a/bootstrap.conf b/bootstrap.conf
index 769e57c..5427c17 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -164,7 +164,7 @@ buildreq="\
 autoconf   2.59
 automake   1.9.6
 autopoint  -
-gettext    0.17
+gettext    0.16
 git        1.5.5
 gzip       -
 libtool    -
diff --git a/configure.ac b/configure.ac
index 25669cf..c6346cc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2062,7 +2062,7 @@ dnl Enable building libvirtd?
 AM_CONDITIONAL([WITH_LIBVIRTD],[test "x$with_libvirtd" = "xyes"])
 
 dnl Check for gettext - don't go any newer than what RHEL 5 supports
-AM_GNU_GETTEXT_VERSION([0.17])
+AM_GNU_GETTEXT_VERSION([0.16])
 AM_GNU_GETTEXT([external])
 
 ALL_LINGUAS=`cd "$srcdir/po" > /dev/null && ls *.po | sed 's+\.po$++'`


2) The script isn't finding my automake and aclocal, even though they're
installed. Solaris has those executables named with a version number.
I'm not experienced enough with Solaris to know if there's any standard
way via the package manger to make one available as just plain automake
(similar to Debian's alternatives system). So I just did this:

ACLOCAL=aclocal-1.9 AUTOMAKE=automake-1.9 ./autogen.sh


3) The bootstrap script previously (when I had manually copied in a
gnulib git checkout from a month-or-so-old libvirt checkout on Linux)
was complaining that rpcgen didn't exist. I've never heard of that
program, but I apparently have something by that name installed:

# rpcgen
rpcgen  (1.1)
usage:  rpcgen infile
        rpcgen [-abCLNTMA] [-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile
        rpcgen [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]
        rpcgen [-s nettype]* [-o outfile] [infile]
        rpcgen [-n netid]* [-o outfile] [infile]
options:
-a              generate all files, including samples
-A              generate code to enable automatic MT mode
-b              backward compatibility mode (generates code for SunOS 4.X)
-c              generate XDR routines
-C              ANSI C mode
-Dname[=value]  define a symbol (same as #define)
-h              generate header file
-i size         size at which to start generating inline code
-I              generate code for inetd support in server (for SunOS 4.X)
-K seconds      server exits after K seconds of inactivity
-l              generate client side stubs
-L              server errors will be printed to syslog
-m              generate server side stubs
-M              generate MT-safe code
-n netid        generate server code that supports named netid
-N              supports multiple arguments and call-by-value
-o outfile      name of the output file
-s nettype      generate server code that supports named nettype
-Sc             generate sample client code that uses remote procedures
-Ss             generate sample server code that defines remote procedures
-Sm             generate makefile template 
-t              generate RPC dispatch table
-T              generate code to support RPC dispatch tables
-v              print version information and exit
-Y path         path where cpp is found


4) The bootstrap script (well, really autopoint) failed because cvs is
not installed:
./bootstrap: cp ._bootmp/gnulib/lib/glthread/threadlib.c gnulib/lib/glthread/threadlib.c # with edits
./bootstrap: (cd ._bootmp2; autopoint) ...
autopoint: *** cvs program not found
autopoint: *** Stop.
Failed to bootstrap, please investigate.

Why on earth does it want cvs? Is that really used? I installed it so I
could move on.


5) pod2man is not in the PATH on Solaris. This patch detects it:

diff --git a/configure.ac b/configure.ac
index 25669cf..e6d31fa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -153,6 +153,8 @@ AC_PATH_PROG([XMLLINT], [xmllint], [/usr/bin/xmllint])
 AC_PATH_PROG([XMLCATALOG], [xmlcatalog], [/usr/bin/xmlcatalog])
 AC_PATH_PROG([XSLTPROC], [xsltproc], [/usr/bin/xsltproc])
 AC_PATH_PROG([AUGPARSE], [augparse], [/usr/bin/augparse])
+AC_PATH_PROG([POD2MAN], [pod2man], [/usr/bin/pod2man], [$PATH$PATH_SEPARATOR/usr/perl5/bin])
+AC_SUBST([POD2MAN])
 AC_PROG_MKDIR_P

 dnl External programs that we can use if they are available.
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index c1b4a9f..0e80f46 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -349,8 +349,7 @@ endif # WITH_LIBVIRTD
 # This is needed for 'make dist' too, so can't wrap in WITH_LIBVIRTD.
 EXTRA_DIST += probes.d libvirtd.stp

-POD2MAN = pod2man -c "Virtualization Support" \
-                       -r "$(PACKAGE)-$(VERSION)" -s 8
+POD2MAN += -c "Virtualization Support" -r "$(PACKAGE)-$(VERSION)" -s 8

 $(srcdir)/libvirtd.8.in: libvirtd.pod.in
        $(AM_V_GEN)$(POD2MAN) $< $@
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 826674a..77d8b10 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -1,5 +1,5 @@

-POD2MAN = pod2man -c "Virtualization Support" -r "$(PACKAGE)-$(VERSION)"
+POD2MAN += -c "Virtualization Support" -r "$(PACKAGE)-$(VERSION)"

 ICON_FILES = \
        libvirt_win_icon_16x16.ico \



6) I still had the issue with the version script code. Here's the error
output:

creating libvirt.la
(cd .libs && rm -f libvirt.la && ln -s ../libvirt.la libvirt.la)
if /bin/sh ../libtool --tag=CC --mode=compile gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I. -I.. -I../gnulib/lib -I../gnulib/lib -I../include -I../src/util -I../include  -I/usr/include/libxml2   -Wall -W -Wformat-y2k -Wformat-security -Winit-self -Wunused -Wunknown-pragmas -Wstrict-aliasing -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn -Wmissing-format-attribute -Wredundant-decls -Wnested-externs -Winline -Winvalid-pch -Wdisabled-optimization -Wpacked-bitfield-compat -Wmultichar -Wno-sign-compare -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fasynchronous-unwind-tables -funit-at-a-time  -DIN_LIBVIRT   -D_REENTRANT -D_REENTRANT  -g -O2 -MT libvirt_qemu_la-libvirt-qemu.lo -MD -MP -MF ".deps/libvirt_qemu_la-libvirt-qemu.Tpo" -c -o libvirt_qemu_la-libvirt-qemu.lo `test -f 'libvirt-qemu.c' || echo './'`libvirt-qemu.c; \
        then mv -f ".deps/libvirt_qemu_la-libvirt-qemu.Tpo" ".deps/libvirt_qemu_la-libvirt-qemu.Plo"; else rm -f ".deps/libvirt_qemu_la-libvirt-qemu.Tpo"; exit 1; fi
 gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I. -I.. -I../gnulib/lib -I../gnulib/lib -I../include -I../src/util -I../include -I/usr/include/libxml2 -Wall -W -Wformat-y2k -Wformat-security -Winit-self -Wunused -Wunknown-pragmas -Wstrict-aliasing -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn -Wmissing-format-attribute -Wredundant-decls -Wnested-externs -Winline -Winvalid-pch -Wdisabled-optimization -Wpacked-bitfield-compat -Wmultichar -Wno-sign-compare -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fasynchronous-unwind-tables -funit-at-a-time -DIN_LIBVIRT -D_REENTRANT -D_REENTRANT -g -O2 -MT libvirt_qemu_la-libvirt-qemu.lo -MD -MP -MF .deps/libvirt_qemu_la-libvirt-qemu.Tpo -c libvirt-qemu.c  -fPIC -DPIC -o .libs/libvirt_qemu_la-libvirt-qemu.o
 gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I. -I.. -I../gnulib/lib -I../gnulib/lib -I../include -I../src/util -I../include -I/usr/include/libxml2 -Wall -W -Wformat-y2k -Wformat-security -Winit-self -Wunused -Wunknown-pragmas -Wstrict-aliasing -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wwrite-strings -Waggregate-return -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn -Wmissing-format-attribute -Wredundant-decls -Wnested-externs -Winline -Winvalid-pch -Wdisabled-optimization -Wpacked-bitfield-compat -Wmultichar -Wno-sign-compare -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fasynchronous-unwind-tables -funit-at-a-time -DIN_LIBVIRT -D_REENTRANT -D_REENTRANT -g -O2 -MT libvirt_qemu_la-libvirt-qemu.lo -MD -MP -MF .deps/libvirt_qemu_la-libvirt-qemu.Tpo -c libvirt-qemu.c -o libvirt_qemu_la-libvirt-qemu.o >/dev/null 2>&1
/bin/sh ../libtool --tag=CC --mode=link gcc -std=gnu99  -g -O2   -o libvirt-qemu.la -rpath /usr/local/lib -Wl,-M -Wl,./libvirt_qemu.syms -version-info 9:1:9    libvirt_qemu_la-libvirt-qemu.lo libvirt.la  -lnsl -lintl 
rm -fr  .libs/libvirt-qemu.a .libs/libvirt-qemu.la .libs/libvirt-qemu.lai .libs/libvirt-qemu.so .libs/libvirt-qemu.so.0 .libs/libvirt-qemu.so.0.9.1 .libs/libvirt-qemu.so.0.9.1T
gcc -std=gnu99 -shared -Wl,-h -Wl,libvirt-qemu.so.0 -o .libs/libvirt-qemu.so.0.9.1  .libs/libvirt_qemu_la-libvirt-qemu.o  -R/home/dtb/libvirt/src/.libs -R/usr/local/lib ./.libs/libvirt.so -lnsl -lintl -lc  -Wl,-M -Wl,./libvirt_qemu.syms
Undefined                       first referenced
 symbol                             in file
_fini                               /usr/lib/crti.o  (symbol has no version assigned)
_init                               /usr/lib/crti.o  (symbol has no version assigned)
__dso_handle                        /usr/sfw/lib/gcc/i386-pc-solaris2.11/3.4.3/crtbegin.o  (symbol has no version assigned)
_lib_version                        /usr/lib/values-Xa.o  (symbol has no version assigned)
ld: fatal: symbol referencing errors. No output written to .libs/libvirt-qemu.so.0.9.1
collect2: ld returned 1 exit status
make[3]: *** [libvirt-qemu.la] Error 1

As I mentioned before, this change "fixes" the problem:
         VERSION_SCRIPT_FLAGS=-Wl,--version-script=
         `$LD --help 2>&1 | grep -- --version-script >/dev/null` || \
        -    VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
        +    VERSION_SCRIPT_FLAGS=""

The more I look into this, though, the less I think that's correct. But
I don't know enough about symbol versioning, especially under Solaris,
to figure out the correct fix.


=======
BACK ON LINUX:

Since I was having so much trouble building from a git clone of libvirt
on Solaris 11 Express, I decided to do the git checkout on my Linux
machine and run `make dist` there. Unfortunately, make dist failed on
Linux (Ubuntu Natty):

  GEN    libvirt-api.xml
Rebuilding API description for libvirt
Parsing ./../include/libvirt/virterror.h
Parsing ./../include/libvirt/libvirt.h
Parsing ./../src/util/event.c
Parsing ./../src/util/virterror.c
Parsing ./../src/libvirt.c
Project libvirt : 2 headers, 3 modules
  307 public functions
  1 public variables
  19 public structs
  119 public typedefs
  27 public macros
Saving XML description ./libvirt-api.xml
Saving XML Cross References ./libvirt-refs.xml
Rebuilding the HTML pages from the XML API
missing XHTML1 DTD
Rebuilding devhelp files
cp: cannot stat `./api.html': No such file or directory
make[1]: *** [distdir] Error 1


As always, I welcome any thoughts or feedback.

Richard
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20110604/be084091/attachment-0001.sig>


More information about the libvir-list mailing list