mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-21 22:53:37 +00:00
Now using febootstrap.
This commit is contained in:
@@ -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
119
README
@@ -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
|
||||
|
||||
@@ -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 "$@"
|
||||
|
||||
26
configure.ac
26
configure.ac
@@ -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])
|
||||
|
||||
@@ -5,6 +5,9 @@ autom4te.cache
|
||||
build*
|
||||
config.h
|
||||
config.h.in
|
||||
config.log
|
||||
config.status
|
||||
configure
|
||||
install-sh
|
||||
missing
|
||||
stamp-h1
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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])
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user