summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2010-12-19 10:56:06 +0000
committerRichard W.M. Jones <rjones@redhat.com>2010-12-19 10:57:06 +0000
commitda24e7aab06361b8d9bb5b5c8417611501e94684 (patch)
treee4041b7a905f825e7d5009071567be75d52e10b1
parent9556903888eed268895a8454491d56302985f7e1 (diff)
downloadlibguestfs-da24e7aab06361b8d9bb5b5c8417611501e94684.tar.gz
libguestfs-da24e7aab06361b8d9bb5b5c8417611501e94684.tar.xz
libguestfs-da24e7aab06361b8d9bb5b5c8417611501e94684.zip
appliance: Don't hard-code febootstrap --exclude parameters.
Create a separate file 'excludelist.in' that contains these regular expressions, and process it the same way as packagelist.in.
-rw-r--r--.gitignore1
-rw-r--r--appliance/Makefile.am10
-rw-r--r--appliance/excludelist.in58
-rwxr-xr-xappliance/make.sh.in11
-rw-r--r--appliance/packagelist.in3
-rw-r--r--configure.ac3
6 files changed, 78 insertions, 8 deletions
diff --git a/.gitignore b/.gitignore
index 4887c317..3fe4eb09 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
*.a
ABOUT-NLS
aclocal.m4
+appliance/excludelist
appliance/make.sh
appliance/packagelist
appliance/stamp-supermin
diff --git a/appliance/Makefile.am b/appliance/Makefile.am
index f1c23279..503160ea 100644
--- a/appliance/Makefile.am
+++ b/appliance/Makefile.am
@@ -19,6 +19,7 @@ include $(top_srcdir)/subdir-rules.mk
EXTRA_DIST = \
packagelist.in \
+ excludelist.in \
init \
make.sh.in
@@ -46,8 +47,13 @@ packagelist: packagelist.in
grep -v '^[[:space:]]*$$' | grep -v '^#' > $@-t
mv $@-t $@
+excludelist: excludelist.in
+ cpp -undef -D$(DISTRO)=1 < $< | \
+ grep -v '^[[:space:]]*$$' | grep -v '^#' > $@-t
+ mv $@-t $@
+
supermin.d/base.img supermin.d/hostfiles: stamp-supermin
-stamp-supermin: make.sh packagelist
+stamp-supermin: make.sh packagelist excludelist
mkdir -p supermin.d
rm -f $@ supermin.d/base.img supermin.d/hostfiles
./make.sh
@@ -70,7 +76,7 @@ supermin.d/init.img: init
# Make clean.
-CLEANFILES = packagelist
+CLEANFILES = packagelist excludelist
clean-local:
rm -rf supermin.d
diff --git a/appliance/excludelist.in b/appliance/excludelist.in
new file mode 100644
index 00000000..7e2abc22
--- /dev/null
+++ b/appliance/excludelist.in
@@ -0,0 +1,58 @@
+/* This is the list of distro packages which are
+ * excluded from the appliance, even if they appear in
+ * packagelist.in (or more likely, as dependencies of
+ * packages in packagelist.in).
+ *
+ * List is a list of basic regular expressions, one per line.
+ *
+ * This file is processed by cpp with one of the
+ * following symbols defined (depending on the distro):
+ *
+ * REDHAT=1 For Fedora, RHEL, EPEL and workalikes.
+ * DEBIAN=1 For Debian.
+ * UBUNTU=1 For Ubuntu.
+ * ARCHLINUX=1 For Archlinux.
+ *
+ * Note that any file provided by one of these packages will
+ * be dropped from the appliance. Of course, this may break
+ * the appliance, so be careful. Other files are also dropped
+ * from the appliance such as docs and man pages: see 'make.sh.in'
+ * for the full details.
+ */
+
+/* Basically the same with a few minor tweaks. */
+#ifdef UBUNTU
+#define DEBIAN 1
+#endif
+
+/* Don't need any Perl or Python appearing in the appliance. */
+^perl
+^python
+
+/* Plymouth is a graphical boot thing - not needed. */
+^plymouth
+
+/* Replacements for SysVinit. We don't use ordinary init in the
+ * appliance.
+ */
+^upstart
+^systemd
+
+/* Linux firmware. Note that febootstrap itself excludes the kernel
+ * which is also not needed since we get the kernel, modules etc
+ * from the host at appliance boot.
+ */
+^linux-firmware
+
+/* Keyboard maps - appliance is not interactive. */
+^kbd-misc
+
+#ifdef REDHAT
+^fedora-logos
+^redhat-logos
+^dracut
+#endif
+
+#ifdef DEBIAN
+^file-rc
+#endif
diff --git a/appliance/make.sh.in b/appliance/make.sh.in
index 10609da6..cb243b55 100755
--- a/appliance/make.sh.in
+++ b/appliance/make.sh.in
@@ -20,11 +20,12 @@ unset CDPATH
set -e
-# XXX Distro-dependent in future.
-excludes="--exclude ^perl --exclude ^python --exclude ^fedora-logos --exclude ^redhat-logos --exclude ^dracut --exclude ^upstart --exclude ^plymouth --exclude ^systemd --exclude ^linux-firmware --exclude ^kbd-misc"
-
-# For Debian:
-excludes="$excludes --exclude ^file-rc"
+# Turn excludelist file into command line arguments.
+exec 5<excludelist
+while read regexp <&5; do
+ excludes="$excludes --exclude $regexp"
+done
+exec 5<&-
# Run febootstrap on the package list.
if [ "x@FEBOOTSTRAP_YUM_CONFIG@" != "xno" ]; then
diff --git a/appliance/packagelist.in b/appliance/packagelist.in
index f479a9b7..2562e592 100644
--- a/appliance/packagelist.in
+++ b/appliance/packagelist.in
@@ -8,6 +8,9 @@
* DEBIAN=1 For Debian.
* UBUNTU=1 For Ubuntu.
* ARCHLINUX=1 For Archlinux.
+ *
+ * There is also a list of packages which are excluded if they appear
+ * as dependencies of the packages below. See: excludelist.in
*/
/* Basically the same with a few minor tweaks. */
diff --git a/configure.ac b/configure.ac
index 2c37457b..3df4c5b7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -204,7 +204,8 @@ if test "x$enable_appliance" = "xyes"; then
dnl
dnl This used to be Very Important but is now just used to select
dnl which packages to install in the appliance, since the package
- dnl names vary slightly across distros. (See appliance/packagelist.in)
+ dnl names vary slightly across distros. (See
+ dnl appliance/packagelist.in and appliance/excludelist.in)
AC_MSG_CHECKING([which Linux distro for package names])
DISTRO=REDHAT
if test -f /etc/debian_version; then