From 531316cc3f25db22d94310334dc8b61596dc263f Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Mon, 25 Sep 2017 14:29:47 +0200 Subject: [PATCH] build: improve and simplify distro detection Add a --with-distro=ID argument for configure, so it is possible to manually specify the distro to use for the packages (in case os-release does not provide ID=.., or the ID is not recognized yet). In the case when --with-distro is not set, keep doing the autodetection, but using os-release only, i.e. dropping the checks for all the other -release files -- since there is --with-distro, older distros with no os-release can still be used. RWMJ: Add documentation to guestfs-building(1). --- docs/guestfs-building.pod | 14 ++++++++++++++ m4/guestfs_appliance.m4 | 44 +++++++++++++++++++------------------------- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/docs/guestfs-building.pod b/docs/guestfs-building.pod index ecc27f9d6..187da37be 100644 --- a/docs/guestfs-building.pod +++ b/docs/guestfs-building.pod @@ -648,6 +648,20 @@ Note that despite this setting, all backends are built into libguestfs, and you can override the backend at runtime by setting the C<$LIBGUESTFS_BACKEND> environment variable (or using API methods). +=item B<--with-distro=REDHAT|DEBIAN|...> + +Libguestfs needs to know which Linux distro is in use so it can choose +package names for the appliance correctly (see for example +F). It normally does this automatically. + +However if you can building or packaging libguestfs on a new distro +then you can use I<--with-distro> to specify that the distro is +similar to an existing one (eg. I<--with-distro=REDHAT> if the distro +is a new Red Hat or CentOS derivative). + +Note that if your distro is completely new then it may still require +upstream modifications. + =item B<--with-extra=">I=I,libvirt,...B<"> =item B<--with-extra="local"> diff --git a/m4/guestfs_appliance.m4 b/m4/guestfs_appliance.m4 index fbba3373f..4993f57a1 100644 --- a/m4/guestfs_appliance.m4 +++ b/m4/guestfs_appliance.m4 @@ -94,31 +94,25 @@ dnl names vary slightly across distros. (See dnl appliance/packagelist.in, appliance/excludefiles.in, dnl appliance/hostfiles.in) AC_MSG_CHECKING([which Linux distro for package names]) -if test -f /etc/os-release; then - ( . /etc/os-release && echo $ID | tr '@<:@:lower:@:>@' '@<:@:upper:@:>@' ) >&AS_MESSAGE_LOG_FD - DISTRO="`. /etc/os-release && echo $ID | tr '@<:@:lower:@:>@' '@<:@:upper:@:>@'`" - AS_CASE([$DISTRO], - [FEDORA | RHEL | CENTOS],[DISTRO=REDHAT], - [OPENSUSE | SLED | SLES],[DISTRO=SUSE], - [ARCH],[DISTRO=ARCHLINUX]) -elif test -f /etc/debian_version; then - DISTRO=DEBIAN - if grep -q 'DISTRIB_ID=Ubuntu' /etc/lsb-release 2>&AS_MESSAGE_LOG_FD; then - DISTRO=UBUNTU - fi -elif test -f /etc/arch-release; then - DISTRO=ARCHLINUX -elif test -f /etc/SuSE-release; then - DISTRO=SUSE -elif test -f /etc/frugalware-release; then - DISTRO=FRUGALWARE -elif test -f /etc/mageia-release; then - DISTRO=MAGEIA -else -dnl fallback option - DISTRO=REDHAT -fi -AC_MSG_RESULT([$DISTRO]) +AC_ARG_WITH([distro], + [AS_HELP_STRING([--with-distro="DISTRO_ID"], + [distro ID @<:@default=ID in /etc/os-release@:>@])],[ + DISTRO="$withval" + AC_MSG_RESULT([$DISTRO (manually specified)]) + ],[ + if test -f /etc/os-release; then + ( . /etc/os-release && echo $ID | tr '@<:@:lower:@:>@' '@<:@:upper:@:>@' ) >&AS_MESSAGE_LOG_FD + DISTRO="`. /etc/os-release && echo $ID | tr '@<:@:lower:@:>@' '@<:@:upper:@:>@'`" + AS_CASE([$DISTRO], + [FEDORA | RHEL | CENTOS],[DISTRO=REDHAT], + [OPENSUSE | SLED | SLES],[DISTRO=SUSE], + [ARCH],[DISTRO=ARCHLINUX]) + AC_MSG_RESULT([$DISTRO (from /etc/os-release)]) + else + AC_MSG_ERROR([/etc/os-release not available, please specify the distro using --with-distro=DISTRO]) + fi + ] +) AC_SUBST([DISTRO]) dnl Add extra packages to the appliance. -- 2.13.2