gecko-dev/taskcluster/docker/recipes/centos-install-debug-symbol...

96 строки
2.6 KiB
Bash

#!/bin/bash
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# Install debuginfo packages
# enable debug info repository
yum-config-manager enable debuginfo
install_options="-q -t -y --skip-broken"
debuginfo_install="debuginfo-install $install_options"
install_debuginfo_for_installed_packages() {
yum list installed \
| awk 'NF >= 3 && $1 !~ /debuginfo/ {
# Remove arch suffix
print gensub(/\.(i.86|x86_64|noarch)/, "", "", $1)
}' \
| xargs $debuginfo_install \
|| : # ignore errors
}
echo "Installing debuginfo packages..."
install_debuginfo_for_installed_packages > /dev/null
# Now search for debuginfo for individual libraries in the system
# Get the length of a string in bytes.
# We have to set LANG=C to get the length in bytes, not chars.
strlen() {
local old_lang byteslen
old_lang=$LANG
LANG=C
byteslen=${#1}
LANG=$old_lang
echo $byteslen
}
echo "Searching for additional debuginfo packages..."
# libraries contains the list of libraries found in the system
libraries=""
# As we accumulate libraries in the $libraries variable, we have
# to constantly check we didn't extrapolate the command line
# argument length limit. arg_max stores the argument limit in
# bytes, discounting the $debuginfo_install command plus one
# space.
arg_max=$(( $(getconf ARG_MAX)-$(strlen $debuginfo_install)-$(strlen " ") ))
to_debuginfo() {
# extracted from debuginfo-install script
if [[ $1 == *-rpms ]]; then
echo ${1%*-rpms}-debug-rpms
else
echo $1-debuginfo
fi
}
get_debuginfo_package() {
local package=${1%.so*}
# Remove version suffix because some libraries have their debuginfo
# package without it in the name.
local unversioned_package=${package%-*}
if [ "$unversioned_package" != "$package" ]; then
package="$package $unversioned_package"
fi
echo $package
}
walk_dir() {
local lib
for i in $1/*; do
# if we found a library...
if [[ $i == *.so ]]; then
lib="$(get_debuginfo_package $(basename $i))"
if [ $(strlen "$debuginfo_install $libraries $lib") -ge $arg_max ]; then
$debuginfo_install $libraries > /dev/null
libraries=""
fi
libraries="$libraries $lib"
fi
done
}
for i in /usr/lib /usr/lib64 /lib /lib64; do
walk_dir $i
done
if [ ${#libraries} -gt 0 ]; then
$debuginfo_install $libraries > /dev/null
fi