Now using febootstrap.

This commit is contained in:
rjones
2009-03-24 09:38:31 +00:00
parent 09c16b5da0
commit 91df7a164b
8 changed files with 35 additions and 187 deletions

View File

@@ -15,4 +15,4 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
SUBDIRS = src examples
SUBDIRS = daemon src examples

119
README
View File

@@ -30,23 +30,13 @@ For discussion please use the fedora-virt mailing list:
Requirements
----------------------------------------------------------------------
- nfs-utils source, unpacked
http://download.sourceforge.net/nfs
- Recent QEMU with vmchannel support
- Compiled Linux kernels for 32 and/or 64 bit (see note below).
- mkinitrd
- cpio
- febootstrap >= 1.2
- XDR, rpcgen
- If you are running a 64 bit or non-x86 machine, see note below.
We don't support initramfs at the moment. Patches gratefully
received.
- (Optional) Local Fedora mirror
Running ./configure will check you have all the requirements installed
on your machine.
@@ -55,41 +45,14 @@ on your machine.
Building
----------------------------------------------------------------------
Unpack nfs-utils source into a directory somewhere, then create a
symlink daemon/nfs-utils to where you unpacked it. For example:
Then make the daemon, library and root filesystem:
pushd daemon
tar zxf /path/to/nfs-utils-1.1.4.tar.gz
ln -s nfs-utils-1.1.4 nfs-utils
popd
For nfs-utils 1.1.4, you may find that the patch
(nfs-utils-1.1.4-build.patch) helps.
Then make the library and shell tools:
./configure
./configure [--mirror=URI]
make
Make the daemon and NFS server:
mkdir daemon/build
pushd daemon/build
../configure [--disable-nfsv4 --disable-gss]
make
popd
For 64 bit you'll probably want to build the 32 bit daemon and NFS
server too:
mkdir daemon/build-32
pushd daemon/build-32
../configure --enable-32bit [--disable-nfsv4 --disable-gss]
make
popd
For complex cross-architecture environments, you may want to build
other versions of the daemon and NFS server as well. See the note
below.
Use the optional --mirror parameter to specify the URI of a local
Fedora mirror. See the discussion of the MIRROR parameter in the
febootstrap(8) manpage.
Finally run the tests:
@@ -100,69 +63,19 @@ these commands as root:
make install
pushd daemon/build
make install
popd
# Repeat for each daemon/build* directory you made above.
Note on 64 bit and non-x86 architectures
Notes on cross-architecture support
----------------------------------------------------------------------
The library runs the Linux kernel code in QEMU. It also runs a small
control daemon inside QEMU. It might also run an NFS server. It
might also run programs from the guest's disk/environment (if asked to).
At the moment we basically don't support cross-architecture or
32-on-64. This limits what is possible for some guests. Filesystem
operations and NFS export will work fine, but running commands in
guests may not be possible.
This leaves open the question of which QEMU do we run, eg. qemu (the
i386 emulator) or qemu-system-x86_64 or qemu-system-ppc64 or ...?
To enable this requires work for cross-architecture and 32-on-64
support in febootstrap.
Several factors influence the choice:
(a) The host architecture.
(b) The guest architecture.
(c) What kernel(s) we find at runtime.
(d) What compiler(s) we find at configure time.
(e) In general, we would prefer to run a 32 bit kernel over a 64 bit
kernel, because that reduces the amount of system memory we have to
give to qemu significantly, and makes libguestfs smaller, faster and
use less memory.
For example, if (a) the host is x86-64, then it might be running a
mixture of (b) i386 and x86-64 guests. Disk formats are stable, even
across 32 and 64 bit and endianness changes, so it doesn't really
matter what kernel we use if we just want to access files in the
guest. In the absence of any other factors, we would choose an i386
kernel and run it in plain 'qemu', because that would use the least
amount of memory.
But if we wanted to enable the feature of running a guest program in
an x86-64 guest, then we have to run an x86-64 kernel and
qemu-system-x86_64 (an i386 kernel can't run 64 bit programs). The
same applies if we didn't find a 32 bit kernel at runtime, or if we
couldn't run "gcc -m32" at configure time (because we can't compile
the daemon).
SO: to enable maximum features on 64 bit architectures:
(1) Ensure that "gcc -m32" can create usable binaries.
(2) Provide 32 and 64 bit kernels binaries at runtime.
If you have a really weird environment, eg. you want to run programs
inside PPC64 guests on your MIPS machine, then:
(3) Provide gcc cross-compiler and glibc for each architecture, and
cross-compile the daemon and NFS server:
mkdir daemon/build-ppc64
pushd daemon/build-ppc64
../configure --host=ppc64-gnu-linux
make
popd
The daemon/ directory contains its own configure script. This is so
that in future we will be able to cross-compile the daemon.
Copyright and license information

View File

@@ -1,4 +1,4 @@
#!/bin/sh -
#!/bin/bash -
# libguestfs
# Copyright (C) 2009 Red Hat Inc.
#
@@ -24,5 +24,7 @@ export AUTOMAKE='automake --foreign'
aclocal
libtoolize
autoreconf
cd daemon
autoreconf
pushd daemon
autoreconf
popd
./configure "$@"

View File

@@ -15,17 +15,10 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
AC_INIT([libguestfs],[0.1])
AC_INIT([libguestfs],[0.2])
AM_INIT_AUTOMAKE
AC_PROG_LIBTOOL
dnl Make sure the user has created the link to nfs-utils source.
if ! test -e $srcdir/daemon/nfs-utils \
-o -f $srcdir/daemon/nfs-utils/utils/nfsd/nfsd.c; then
AC_MSG_ERROR([$srcdir/daemon/nfs-utils must be a symlink to the unpacked nfs-utils sources.
See the README file for more information.])
fi
dnl Check for basic C environment.
AC_PROG_CC
AC_PROG_INSTALL
@@ -46,21 +39,20 @@ AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[
AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
])
dnl Check for febootstrap.
AC_CHECK_PROG([FEBOOTSTRAP],[febootstrap],[febootstrap],[no])
test "x$FEBOOTSTRAP" = "xno" && AC_MSG_ERROR([febootstrap must be installed])
dnl Check for QEMU. We only check for the basic 'qemu' program here
dnl (ie. the i386 full system qemu). But at runtime we might choose
dnl a different qemu to run, eg. qemu-system-ppc. What we run depends
dnl on several factors explained in the README.
dnl a different qemu to run, eg. qemu-system-ppc.
AC_PATH_PROG([QEMU],[qemu],[no],
[$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
test "x$QEMU" = "xno" && AC_MSG_ERROR([No 'qemu' program found])
test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed])
AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.])
dnl Check for mkinitrd, cpio.
AC_PATH_PROG([MKINITRD],[mkinitrd],[no],
[$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
test "x$MKINITRD" = "xno" && AC_MSG_ERROR([No 'mkinitrd' program found])
AC_CHECK_PROG([CPIO],[cpio],[cpio],[no])
test "x$CPIO" = "xno" && AC_MSG_ERROR([No 'cpio' program found])
dnl Run in subdirs.
AC_CONFIG_SUBDIRS([daemon])
dnl Produce output files.
AC_CONFIG_HEADERS([config.h])

View File

@@ -5,6 +5,9 @@ autom4te.cache
build*
config.h
config.h.in
config.log
config.status
configure
install-sh
missing
stamp-h1

View File

@@ -14,5 +14,3 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
SUBDIRS = nfs-utils

View File

@@ -15,16 +15,9 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
AC_INIT([libguestfs-daemon],[0.1])
AC_INIT([libguestfs-daemon],[0.2])
AM_INIT_AUTOMAKE
dnl Make sure the user has created the link to nfs-utils source.
if ! test -e $srcdir/nfs-utils \
-o -f $srcdir/nfs-utils/utils/nfsd/nfsd.c; then
AC_MSG_ERROR([$srcdir/nfs-utils must be a symlink to the unpacked nfs-utils sources.
See the README file for more information.])
fi
dnl If the user specified --enable-32bit, then force the C compiler
dnl to build 32 bit binaries (gcc -m32).
AC_ARG_ENABLE([32bit],
@@ -47,9 +40,6 @@ AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[
AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
])
dnl Run in subdirs.
AC_CONFIG_SUBDIRS([nfs-utils])
dnl Produce output files.
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile])

View File

@@ -1,50 +0,0 @@
This patch fixes nfs-utils to support nested builds in subdirectories
properly.
- Richard W.M. Jones (rjones@redhat.com)
diff -ur nfs-utils-1.1.4/support/export/Makefile.am nfs-utils-1.1.4.buildfix/support/export/Makefile.am
--- nfs-utils-1.1.4/support/export/Makefile.am 2008-10-17 15:20:09.000000000 +0100
+++ nfs-utils-1.1.4.buildfix/support/export/Makefile.am 2009-03-02 18:46:59.000000000 +0000
@@ -40,9 +40,9 @@
$(GENFILES_H): %.h: %.x $(RPCGEN)
test -f $@ && rm -rf $@ || true
$(RPCGEN) -h -o $@ $<
- rm -f $(top_builddir)/support/include/mount.h
- $(LN_S) ../export/mount.h $(top_builddir)/support/include/mount.h
+ rm -f $(top_srcdir)/support/export/mount.h
+ $(LN_S) $(abs_top_builddir)/support/export/mount.h $(top_srcdir)/support/export/mount.h
MAINTAINERCLEANFILES = Makefile.in
-CLEANFILES = $(GENFILES) $(top_builddir)/support/include/mount.h
+CLEANFILES = $(GENFILES) $(top_srcdir)/support/export/mount.h
diff -ur nfs-utils-1.1.4/utils/mount/Makefile.am nfs-utils-1.1.4.buildfix/utils/mount/Makefile.am
--- nfs-utils-1.1.4/utils/mount/Makefile.am 2008-10-17 15:20:09.000000000 +0100
+++ nfs-utils-1.1.4.buildfix/utils/mount/Makefile.am 2009-03-03 08:50:30.000000000 +0000
@@ -17,6 +17,8 @@
parse_opt.h parse_dev.h \
nfs4_mount.h nfs_mount4.h stropts.h version.h
+mount_nfs_CFLAGS = -I$(top_builddir)/support/export
+
mount_nfs_LDADD = ../../support/nfs/libnfs.a \
../../support/export/libexport.a
diff -ur nfs-utils-1.1.4/utils/statd/Makefile.am nfs-utils-1.1.4.buildfix/utils/statd/Makefile.am
--- nfs-utils-1.1.4/utils/statd/Makefile.am 2008-10-17 15:20:09.000000000 +0100
+++ nfs-utils-1.1.4.buildfix/utils/statd/Makefile.am 2009-03-02 18:49:10.000000000 +0000
@@ -51,10 +51,12 @@
$(GENFILES_H): %.h: %.x $(RPCGEN)
test -f $@ && rm -rf $@ || true
$(RPCGEN) -h -o $@ $<
+ rm -f $(top_srcdir)/utils/statd/sm_inter.h
+ $(LN_S) $(abs_top_builddir)/utils/statd/sm_inter.h $(top_srcdir)/utils/statd/sm_inter.h
MAINTAINERCLEANFILES = Makefile.in
-CLEANFILES = $(GENFILES)
+CLEANFILES = $(GENFILES) $(top_srcdir)/utils/statd/sm_inter.h
#######################################################################
# The following allows the current practice of having