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.
This commit is contained in:
Richard W.M. Jones
2010-12-19 10:56:06 +00:00
parent 9556903888
commit da24e7aab0
6 changed files with 78 additions and 8 deletions

1
.gitignore vendored
View File

@@ -2,6 +2,7 @@
*.a
ABOUT-NLS
aclocal.m4
appliance/excludelist
appliance/make.sh
appliance/packagelist
appliance/stamp-supermin

View File

@@ -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

58
appliance/excludelist.in Normal file
View File

@@ -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

View File

@@ -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

View File

@@ -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. */

View File

@@ -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