*.a
ABOUT-NLS
aclocal.m4
+appliance/excludelist
appliance/make.sh
appliance/packagelist
appliance/stamp-supermin
EXTRA_DIST = \
packagelist.in \
+ excludelist.in \
init \
make.sh.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
# Make clean.
-CLEANFILES = packagelist
+CLEANFILES = packagelist excludelist
clean-local:
rm -rf supermin.d
--- /dev/null
+/* 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
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
* 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. */
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