The ELF NEEDED are used to determine guestfsd's library dependencies with help from the dynamic linker and the package manager. This was prompted by Debian bug #972241 which was caused by a libtirpc package renaming in Debian/unstable because the SONAME had been changed. --- appliance/Makefile.am | 26 ++++++++++++++++- appliance/packagelist.in | 62 ++-------------------------------------- m4/guestfs-appliance.m4 | 9 ++++++ 3 files changed, 36 insertions(+), 61 deletions(-) diff --git a/appliance/Makefile.am b/appliance/Makefile.am index bad5d9d9eb..a213e12be4 100644 --- a/appliance/Makefile.am +++ b/appliance/Makefile.am @@ -79,7 +79,30 @@ make.sh: make.sh.in $(top_builddir)/config.log $(top_builddir)/config.status PACKAGELIST_CPP_FLAGS = -D$(DISTRO)=1 -DEXTRA_PACKAGES="$(EXTRA_PACKAGES)" -packagelist: packagelist.in Makefile + +if HAVE_RPM +QUERY_FILES_CMD := xargs rpm -qf --qf '%{name}\n' +endif +if HAVE_DPKG +QUERY_FILES_CMD := xargs dpkg -S | cut -d: -f1 +endif +if HAVE_PACMAN +QUERY_FILES_CMD := xargs pacman -Qo | sed -r 's/.* is owned by ([^ ]+) .*/\1/' +endif + +# Automatically generate library dependency list +guestfsd.deps: ../daemon/guestfsd + /sbin/ldconfig -p > ld.so.cache.txt + objdump -p $^ |\ + sed -ne '/NEEDED/{s/ *NEEDED *//; p;}' |\ + xargs -i grep -F {} ld.so.cache.txt |\ + sed -ne '/ => /{s/.* => *//; p;}' |\ + $(QUERY_FILES_CMD) |\ + sort -u > $@.t + rm -f ld.so.cache.txt + mv $@.t $@ + +packagelist: packagelist.in Makefile guestfsd.deps m4 $(PACKAGELIST_CPP_FLAGS) $< | \ grep -v '^[[:space:]]*$$' | grep -v '^#' > $@-t cmp -s $@ $@-t || mv $@-t $@ @@ -153,5 +176,6 @@ stamp-libguestfs-make-fixed-appliance.pod: libguestfs-make-fixed-appliance.pod DISTCLEANFILES += \ make.sh \ + guestfsd.deps \ packagelist \ supermin.d/* diff --git a/appliance/packagelist.in b/appliance/packagelist.in index 13c83d8e45..68ed16a415 100644 --- a/appliance/packagelist.in +++ b/appliance/packagelist.in @@ -23,7 +23,6 @@ dnl Basically the same with a few minor tweaks. ifelse(UBUNTU,1,`define(`DEBIAN',1)') ifelse(REDHAT,1, - augeas-libs cryptsetup cryptsetup-luks dnl old name used before Fedora 17 dhclient @@ -32,28 +31,20 @@ ifelse(REDHAT,1, gfs2-utils grub hfsplus-tools - hivex iproute iputils - jansson kernel - libcap - libldm - libtirpc nilfs-utils ntfsprogs ntfs-3g ntfs-3g-system-compression openssh-clients - pcre policycoreutils reiserfs-utils - libselinux syslinux-extlinux systemd dnl for /sbin/reboot and udevd vim-minimal xz - yara zfs-fuse ) @@ -79,17 +70,7 @@ dnl iproute has been renamed to iproute2 iputils-tracepath isc-dhcp-client ldmtool - libaugeas0 libc-bin - libcap2 - libhivex0 - libjansson4 - libpcre3 - libsystemd0 - libsystemd-id128-0 - libsystemd-journal0 - libtirpc1 - libyara3 linux-image dnl syslinux 'suggests' mtools, but in reality it's a hard dependency: mtools @@ -107,19 +88,14 @@ dnl iproute has been renamed to iproute2 ) ifelse(ARCHLINUX,1, - augeas cdrkit cdrtools cryptsetup dhcpcd gptfdisk grub - hivex iproute2 iputils - jansson - libcap - libtirpc linux lrzip dnl syslinux has mtools as optional dependency, but in reality it's @@ -129,16 +105,13 @@ ifelse(ARCHLINUX,1, nilfs-utils ntfs-3g ntfs-3g-system-compression - pcre reiserfsprogs systemd vim xz - yara ) ifelse(SUSE,1, - augeas dnl It seems no other augeas package depends on it. augeas-lenses btrfsprogs @@ -149,16 +122,9 @@ ifelse(SUSE,1, genisoimage glibc-locale gptfdisk - hivex initviocons iproute2 iputils - libcap2 - libhivex0 - libjansson4 - libselinux1 - libtirpc3 - libyara3 mkisofs ntfsprogs ntfs-3g @@ -167,11 +133,9 @@ ifelse(SUSE,1, systemd vim xz - yara ) ifelse(FRUGALWARE,1, - augeas cryptsetup-luks cdrkit dhclient @@ -179,14 +143,10 @@ ifelse(FRUGALWARE,1, hfsplus iproute2 iputils - jansson kernel - libcap - libtirpc ntfsprogs ntfs-3g openssh - pcre reiserfsprogs systemd vim @@ -197,7 +157,6 @@ ifelse(FRUGALWARE,1, ) ifelse(MAGEIA,1, - augeas cryptsetup chkconfig /* for /etc/init.d */ cdrkit-genisoimage @@ -207,30 +166,21 @@ ifelse(MAGEIA,1, gfs2-utils grub hfsplus-tools - hivex iproute2 iputils - libcap - libjansson4 - lib64jansson4 /* lib64jansson4 does not provide libjansson4 */ - libldm - libtirpc dnl syslinux uses mtools without depending on it mtools nilfs-utils ntfsprogs ntfs-3g openssh-clients - pcre reiserfs-utils - libselinux systemd /* for /sbin/reboot and udevd */ vim-minimal xz ) ifelse(OPENMANDRIVA,1, - augeas cryptsetup chkconfig /* for /etc/init.d */ cdrkit-genisoimage @@ -238,27 +188,20 @@ ifelse(OPENMANDRIVA,1, dhcp-client extlinux grub2 - lib64hivex0 - hivex iproute2 iputils - libcap - libjansson4 - lib64jansson4 /* lib64jansson4 does not provide libjansson4 */ - libldm - libtirpc dnl syslinux uses mtools without depending on it mtools nilfs-utils ntfs-3g openssh-clients - pcre - libselinux systemd /* for /sbin/reboot and udevd */ vim-minimal xz ) +include(guestfsd.deps) + acl attr bash @@ -280,7 +223,6 @@ gzip jfsutils kmod less -libxml2 lsof lsscsi lvm2 diff --git a/m4/guestfs-appliance.m4 b/m4/guestfs-appliance.m4 index a7f7d8321a..b0a6ab40f0 100644 --- a/m4/guestfs-appliance.m4 +++ b/m4/guestfs-appliance.m4 @@ -114,6 +114,15 @@ AC_ARG_WITH([distro], AC_MSG_ERROR([/etc/os-release not available, please specify the distro using --with-distro=DISTRO]) fi ] + AM_CONDITIONAL([HAVE_RPM], + [AS_CASE([$DISTRO], [REDHAT | SUSE | OPENMANDRIVA | MAGEIA ], [true], + [*], [false])]) + AM_CONDITIONAL([HAVE_DPKG], + [AS_CASE([$DISTRO], [DEBIAN | UBUNTU ], [true], + [*], [false])]) + AM_CONDITIONAL([HAVE_PACMAN], + [AS_CASE([$DISTRO], [ARCHLINUX | FRUGALWARE ], [true], + [*], [false])]) ) AC_SUBST([DISTRO]) -- 2.28.0