- Resolve also library dependencies of libnss in mkinitrd (bnc#847785)

- BuildRequire nfs-utils to get mount.nfs, for virt-rescue

OBS-URL: https://build.opensuse.org/package/show/Virtualization/libguestfs?expand=0&rev=254
This commit is contained in:
Olaf Hering 2014-01-20 16:32:24 +00:00 committed by Git OBS Bridge
parent 6e1bf6bd40
commit 2f158c7e68
6 changed files with 318 additions and 9 deletions

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Mon Jan 20 11:34:25 CET 2014 - ohering@suse.de
- Resolve also library dependencies of libnss in mkinitrd (bnc#847785)
- BuildRequire nfs-utils to get mount.nfs, for virt-rescue
-------------------------------------------------------------------
Thu Jan 16 21:29:47 CET 2014 - ohering@suse.de

View File

@ -1,7 +1,8 @@
---
mkinitrd/scripts/setup-prepare.sh | 94 +++++++++++++++++++++++++++++++-------
mkinitrd/scripts/setup-progs.sh | 4 -
2 files changed, 79 insertions(+), 19 deletions(-)
mkinitrd/scripts/setup-prepare.sh | 94 ++++++++++++++++++++++++++++-------
mkinitrd/scripts/setup-progs.sh | 4 -
mkinitrd/scripts/setup-sharedlibs.sh | 60 +++++++++++++---------
3 files changed, 114 insertions(+), 44 deletions(-)
Index: 1110/mkinitrd/scripts/setup-prepare.sh
===================================================================
@ -192,3 +193,101 @@ Index: 1110/mkinitrd/scripts/setup-progs.sh
[ -e "bin/sh" ] || ln -s /bin/bash bin/sh
Index: 1110/mkinitrd/scripts/setup-sharedlibs.sh
===================================================================
--- 1110.orig/mkinitrd/scripts/setup-sharedlibs.sh
+++ 1110/mkinitrd/scripts/setup-sharedlibs.sh
@@ -54,58 +54,68 @@ shared_object_files() {
while [ -L "/$lib" ]; do
echo $lib
link="$(readlink "/$lib")"
if [ x"${link:0:1}" == x"/" ]; then
lib=${link#/}
else
lib="${lib%/*}/$link"
fi
done
echo $lib
done
}
-verbose -ne "Shared libs:\t"
-# Copy all required shared libraries and the symlinks that
-# refer to them.
-lib_files=$(shared_object_files "${initrd_bins[@]}")
-[ $? -eq 0 ] || return 1
-if [ -n "$lib_files" ]; then
- for lib in $lib_files; do
- [ -L $root_dir/$lib ] || verbose -n "$lib "
- ( cd ${root_dir:-/} ; cp -dp --parents $lib $tmp_mnt )
- done
- lib_files=
+copy_shared_libs() {
+ local bins=( "$@" )
+ local extra_lib_files lib_files lib i
+
+ # First see what nss and other libs are required. This can be 64bit or 32bit,
+ # depending on the host and the already copied binaries.
case "$(uname -m)" in
alpha|ia64)
+ # this is a known location
mkdir -p $tmp_mnt/lib
- lib_files="$lib_files `echo $root_dir/lib/libnss_{dns,files}* $root_dir/lib/lib{gcc_s,unwind}.so*`"
+ extra_lib_files="`echo $root_dir/lib/libnss_{dns,files}* $root_dir/lib/lib{gcc_s,unwind}.so*`"
;;
*)
- # no symlinks, most point into the running system
- for i in `LANG=C LC_ALL=C file -b $tmp_mnt/{,usr/}{lib*/udev/,{,s}bin}/* | sed -n 's/^ELF \([0-9][0-9]-bit\) .*/\1/p' | sort -u`
+ # Skip symlinks, they may point into the running system instead of $tmp_mnt
+ for i in `LANG=C LC_ALL=C file -b $tmp_mnt/{,usr/}{lib*/udev,{,s}bin}/* | sed -n 's/^ELF \([0-9][0-9]-bit\) .*/\1/p' | sort -u`
do
case "$i" in
32-bit)
mkdir -p $tmp_mnt/lib
- lib_files="$lib_files `echo $root_dir/lib/libnss_{dns,files}* $root_dir/lib/libgcc_s.so*`"
+ extra_lib_files="$extra_lib_files `echo $root_dir/lib/libnss_{dns,files}* $root_dir/lib/libgcc_s.so*`"
;;
64-bit)
mkdir -p $tmp_mnt/lib64
- lib_files="$lib_files `echo $root_dir/lib64/libnss_{dns,files}* $root_dir/lib64/libgcc_s.so*`"
+ extra_lib_files="$extra_lib_files `echo $root_dir/lib64/libnss_{dns,files}* $root_dir/lib64/libgcc_s.so*`"
;;
esac
done
;;
esac
- for lib in $lib_files ; do
- if [ -f $lib ] ; then
- verbose -n "${lib##$root_dir/} "
- cp -dp --parents $lib $tmp_mnt
+ verbose -ne "Shared libs:\t"
+
+ # Now collect a list of libraries on which the binaries and extra libs depend on
+ lib_files=$( shared_object_files ${bins[@]} $extra_lib_files )
+ if [ $? -eq 0 ]
+ then
+ if [ -n "$lib_files" ]
+ then
+ # Finally copy dependencies and extra libs
+ for lib in $lib_files $extra_lib_files
+ do
+ [ -L $root_dir/$lib ] || verbose -n "$lib "
+ ( cd ${root_dir:-/} ; cp -dp --parents $lib $tmp_mnt )
+ done
+ verbose
+ else
+ verbose "none"
fi
- done
- verbose
-else
- verbose "none"
-fi
+ else
+ return 1
+ fi
+}
+# Copy all required shared libraries and the symlinks that refer to them.
+copy_shared_libs "${initrd_bins[@]}"

View File

@ -1,7 +1,8 @@
---
mkinitrd/scripts/setup-prepare.sh | 94 +++++++++++++++++++++++++++++++-------
mkinitrd/scripts/setup-progs.sh | 17 +-----
2 files changed, 80 insertions(+), 31 deletions(-)
mkinitrd/scripts/setup-prepare.sh | 94 ++++++++++++++++++++++++++++-------
mkinitrd/scripts/setup-progs.sh | 17 +-----
mkinitrd/scripts/setup-sharedlibs.sh | 60 +++++++++++++---------
3 files changed, 115 insertions(+), 56 deletions(-)
Index: 1210/mkinitrd/scripts/setup-prepare.sh
===================================================================
@ -212,3 +213,101 @@ Index: 1210/mkinitrd/scripts/setup-progs.sh
[ -e "bin/sh" ] || ln -s /bin/bash bin/sh
Index: 1210/mkinitrd/scripts/setup-sharedlibs.sh
===================================================================
--- 1210.orig/mkinitrd/scripts/setup-sharedlibs.sh
+++ 1210/mkinitrd/scripts/setup-sharedlibs.sh
@@ -54,58 +54,68 @@ shared_object_files() {
while [ -L "/$lib" ]; do
echo $lib
link="$(readlink "/$lib")"
if [ x"${link:0:1}" == x"/" ]; then
lib=${link#/}
else
lib="${lib%/*}/$link"
fi
done
echo $lib
done
}
-verbose -ne "Shared libs:\t"
-# Copy all required shared libraries and the symlinks that
-# refer to them.
-lib_files=$(shared_object_files "${initrd_bins[@]}")
-[ $? -eq 0 ] || return 1
-if [ -n "$lib_files" ]; then
- for lib in $lib_files; do
- [ -L $root_dir/$lib ] || verbose -n "$lib "
- ( cd ${root_dir:-/} ; cp -dp --parents $lib $tmp_mnt )
- done
- lib_files=
+copy_shared_libs() {
+ local bins=( "$@" )
+ local extra_lib_files lib_files lib i
+
+ # First see what nss and other libs are required. This can be 64bit or 32bit,
+ # depending on the host and the already copied binaries.
case "$(uname -m)" in
ia64)
+ # this is a known location
mkdir -p $tmp_mnt/lib
- lib_files="$lib_files `echo $root_dir/lib/libnss_{dns,files}* $root_dir/lib/lib{gcc_s,unwind}.so*`"
+ extra_lib_files="`echo $root_dir/lib/libnss_{dns,files}* $root_dir/lib/lib{gcc_s,unwind}.so*`"
;;
*)
- # no symlinks, most point into the running system
- for i in `LANG=C LC_ALL=C file -b $tmp_mnt/{,usr/}{lib*/udev/,{,s}bin}/* | sed -n 's/^ELF \([0-9][0-9]-bit\) .*/\1/p' | sort -u`
+ # Skip symlinks, they may point into the running system instead of $tmp_mnt
+ for i in `LANG=C LC_ALL=C file -b $tmp_mnt/{,usr/}{lib*/udev,{,s}bin}/* | sed -n 's/^ELF \([0-9][0-9]-bit\) .*/\1/p' | sort -u`
do
case "$i" in
32-bit)
mkdir -p $tmp_mnt/lib
- lib_files="$lib_files `echo $root_dir/lib/libnss_{dns,files}* $root_dir/lib/libgcc_s.so*`"
+ extra_lib_files="$extra_lib_files `echo $root_dir/lib/libnss_{dns,files}* $root_dir/lib/libgcc_s.so*`"
;;
64-bit)
mkdir -p $tmp_mnt/lib64
- lib_files="$lib_files `echo $root_dir/lib64/libnss_{dns,files}* $root_dir/lib64/libgcc_s.so*`"
+ extra_lib_files="$extra_lib_files `echo $root_dir/lib64/libnss_{dns,files}* $root_dir/lib64/libgcc_s.so*`"
;;
esac
done
;;
esac
- for lib in $lib_files ; do
- if [ -f $lib ] ; then
- verbose -n "${lib##$root_dir/} "
- cp -dp --parents $lib $tmp_mnt
+ verbose -ne "Shared libs:\t"
+
+ # Now collect a list of libraries on which the binaries and extra libs depend on
+ lib_files=$( shared_object_files ${bins[@]} $extra_lib_files )
+ if [ $? -eq 0 ]
+ then
+ if [ -n "$lib_files" ]
+ then
+ # Finally copy dependencies and extra libs
+ for lib in $lib_files $extra_lib_files
+ do
+ [ -L $root_dir/$lib ] || verbose -n "$lib "
+ ( cd ${root_dir:-/} ; cp -dp --parents $lib $tmp_mnt )
+ done
+ verbose
+ else
+ verbose "none"
fi
- done
- verbose
-else
- verbose "none"
-fi
+ else
+ return 1
+ fi
+}
+# Copy all required shared libraries and the symlinks that refer to them.
+copy_shared_libs "${initrd_bins[@]}"

View File

@ -1,7 +1,8 @@
---
mkinitrd/scripts/setup-prepare.sh | 126 ++++++++++++++++++++++----------------
mkinitrd/scripts/setup-progs.sh | 17 -----
2 files changed, 79 insertions(+), 64 deletions(-)
mkinitrd/scripts/setup-prepare.sh | 126 +++++++++++++++++++++--------------
mkinitrd/scripts/setup-progs.sh | 17 ----
mkinitrd/scripts/setup-sharedlibs.sh | 60 +++++++++-------
3 files changed, 114 insertions(+), 89 deletions(-)
Index: 1220/mkinitrd/scripts/setup-prepare.sh
===================================================================
@ -217,3 +218,101 @@ Index: 1220/mkinitrd/scripts/setup-progs.sh
[ -e "bin/sh" ] || ln -s /bin/bash bin/sh
Index: 1220/mkinitrd/scripts/setup-sharedlibs.sh
===================================================================
--- 1220.orig/mkinitrd/scripts/setup-sharedlibs.sh
+++ 1220/mkinitrd/scripts/setup-sharedlibs.sh
@@ -54,58 +54,68 @@ shared_object_files() {
while [ -L "/$lib" ]; do
echo $lib
link="$(readlink "/$lib")"
if [ x"${link:0:1}" == x"/" ]; then
lib=${link#/}
else
lib="${lib%/*}/$link"
fi
done
echo $lib
done
}
-verbose -ne "Shared libs:\t"
-# Copy all required shared libraries and the symlinks that
-# refer to them.
-lib_files=$(shared_object_files "${initrd_bins[@]}")
-[ $? -eq 0 ] || return 1
-if [ -n "$lib_files" ]; then
- for lib in $lib_files; do
- [ -L $root_dir/$lib ] || verbose -n "$lib "
- ( cd ${root_dir:-/} ; cp -dp --parents $lib $tmp_mnt )
- done
- lib_files=
+copy_shared_libs() {
+ local bins=( "$@" )
+ local extra_lib_files lib_files lib i
+
+ # First see what nss and other libs are required. This can be 64bit or 32bit,
+ # depending on the host and the already copied binaries.
case "$(uname -m)" in
ia64)
+ # this is a known location
mkdir -p $tmp_mnt/lib
- lib_files="$lib_files `echo $root_dir/lib/libnss_{dns,files}* $root_dir/lib/lib{gcc_s,unwind}.so*`"
+ extra_lib_files="`echo $root_dir/lib/libnss_{dns,files}* $root_dir/lib/lib{gcc_s,unwind}.so*`"
;;
*)
- # no symlinks, most point into the running system
- for i in `LANG=C LC_ALL=C file -b $tmp_mnt/{,usr/}{lib*/udev/,{,s}bin}/* | sed -n 's/^ELF \([0-9][0-9]-bit\) .*/\1/p' | sort -u`
+ # Skip symlinks, they may point into the running system instead of $tmp_mnt
+ for i in `LANG=C LC_ALL=C file -b $tmp_mnt/{,usr/}{lib*/udev,{,s}bin}/* | sed -n 's/^ELF \([0-9][0-9]-bit\) .*/\1/p' | sort -u`
do
case "$i" in
32-bit)
mkdir -p $tmp_mnt/lib
- lib_files="$lib_files `echo $root_dir/lib/libnss_{dns,files}* $root_dir/lib/libgcc_s.so*`"
+ extra_lib_files="$extra_lib_files `echo $root_dir/lib/libnss_{dns,files}* $root_dir/lib/libgcc_s.so*`"
;;
64-bit)
mkdir -p $tmp_mnt/lib64
- lib_files="$lib_files `echo $root_dir/lib64/libnss_{dns,files}* $root_dir/lib64/libgcc_s.so*`"
+ extra_lib_files="$extra_lib_files `echo $root_dir/lib64/libnss_{dns,files}* $root_dir/lib64/libgcc_s.so*`"
;;
esac
done
;;
esac
- for lib in $lib_files ; do
- if [ -f $lib ] ; then
- verbose -n "${lib##$root_dir/} "
- cp -dp --parents $lib $tmp_mnt
+ verbose -ne "Shared libs:\t"
+
+ # Now collect a list of libraries on which the binaries and extra libs depend on
+ lib_files=$( shared_object_files ${bins[@]} $extra_lib_files )
+ if [ $? -eq 0 ]
+ then
+ if [ -n "$lib_files" ]
+ then
+ # Finally copy dependencies and extra libs
+ for lib in $lib_files $extra_lib_files
+ do
+ [ -L $root_dir/$lib ] || verbose -n "$lib "
+ ( cd ${root_dir:-/} ; cp -dp --parents $lib $tmp_mnt )
+ done
+ verbose
+ else
+ verbose "none"
fi
- done
- verbose
-else
- verbose "none"
-fi
+ else
+ return 1
+ fi
+}
+# Copy all required shared libraries and the symlinks that refer to them.
+copy_shared_libs "${initrd_bins[@]}"

View File

@ -5,6 +5,11 @@
# copy daemon manually because it is located in RPM_BUILD_ROOT
mkdir -vp $tmp_mnt/usr/sbin
cp_bin $(type -p guestfsd) $tmp_mnt/usr/sbin
# required for mount.nfs inside the appliance
for i in /etc/netconfig /etc/protocols /etc/rpc /etc/services
do
cp $i $tmp_mnt$i
done
# many guestfish commands need a mount point
# in guestfsd the mount point defaults to /sysroot

View File

@ -363,6 +363,7 @@ BuildRequires: mdadm
BuildRequires: mkinitrd
%endif
BuildRequires: module-init-tools
BuildRequires: nfs-client
BuildRequires: ntfs-3g
BuildRequires: ntfsprogs
BuildRequires: parted