0f3670fe64
* build-helm-charts.sh: - auto-detect $OS - process DEB files on Debian * deb-utils: new file with utilities for working with binary DEB files * tox.ini: run unit tests for deb-utils TESTS ======================================== Run script on CentOS and make sure the generated tarball's contents are the same as before the patch. Run script on Debian and make sure the generated tarball's contents look reasonable. Story: 2009897 Task: 45293 Depends-On: https://review.opendev.org/c/starlingx/openstack-armada-app/+/840561 Change-Id: Icbcb0bb7b47f623fac8d0851687423396edb5747 Signed-off-by: Davlet Panech <davlet.panech@windriver.com>
101 lines
2.4 KiB
Bash
101 lines
2.4 KiB
Bash
# bash
|
|
# vim: set syn=sh:
|
|
|
|
__DEB_UTILS_DIR=$(readlink -f "$(dirname "${BASH_SOURCE[0]}")")/deb-utils
|
|
|
|
#
|
|
# Usage: __deb_get_section DEB_FILE {control|data}
|
|
#
|
|
# Uncompress and print the specified section to STDOUT in tar format.
|
|
# You should pipe it to "tar" to be useful.
|
|
#
|
|
function __deb_get_section {
|
|
local deb_file="$1"
|
|
local section="$2"
|
|
|
|
# find $section.tar.{gz,bz2,xz}
|
|
local section_entry
|
|
section_entry="$(
|
|
ar t "$deb_file" | \grep "^$section[.]" || true
|
|
)" || return 1
|
|
if [[ -z "$section_entry" ]] ; then
|
|
echo "$deb_file: couldn't find ${section}.*" >&2
|
|
return 1
|
|
fi
|
|
|
|
# untar it to stdout
|
|
local uncompress
|
|
case "${section_entry#${section}.}" in
|
|
tar.gz | tgz) uncompress="gunzip" ;;
|
|
tar.bz2) uncompress="bunzip2" ;;
|
|
tar.xz) uncompress="unxz" ;;
|
|
*)
|
|
echo "$deb_file: unsupported archive format $section_entry" >&2
|
|
return 1
|
|
esac
|
|
ar p "$1" "$section_entry" | $uncompress
|
|
check_pipe_status
|
|
}
|
|
|
|
#
|
|
# Usage: deb_get_control DEB_FILE
|
|
#
|
|
# Print the control file from the specified DEB package
|
|
#
|
|
function deb_get_control {
|
|
__deb_get_section "$1" control | tar -O -x ./control
|
|
check_pipe_status
|
|
}
|
|
|
|
#
|
|
# Usage: deb_extract_content DEB_FILE [--verbose] [PATHS_IN_ARCHIVE...]
|
|
#
|
|
# Extract deb package content to current directory
|
|
#
|
|
function deb_extract_content {
|
|
__deb_get_section "$1" data | tar -x
|
|
check_pipe_status
|
|
}
|
|
|
|
#
|
|
# Usage: deb_get_field KEY...
|
|
#
|
|
# Read a debian control file from STDIN, find the specified fields
|
|
# and print their values on STDOUT. With multiple fields, their values
|
|
# will be merged in the output w/no separators.
|
|
#
|
|
# See: https://www.debian.org/doc/debian-policy/ch-controlfields.html
|
|
#
|
|
function deb_get_field {
|
|
${PYTHON3:-python3} "${__DEB_UTILS_DIR}/deb_get_field.py" "$@"
|
|
}
|
|
|
|
#
|
|
# Usage: deb_get_simple_depends
|
|
#
|
|
# Read debian control file from STDIN, then print its immediate runtime
|
|
# dependencies to STDOUT, one per line, stripping any conditions and
|
|
# operators, e.g.:
|
|
#
|
|
# ...
|
|
# Depends: aaa, bbb [!amd64], ccc | ddd (>= 1.0)
|
|
# ...
|
|
#
|
|
# will be converted to
|
|
#
|
|
# aaa
|
|
# bbb
|
|
# ccc
|
|
# ddd
|
|
#
|
|
function deb_get_simple_depends {
|
|
local raw_depends
|
|
raw_depends=$(deb_get_field 'Pre-Depends' 'Depends') || return 1
|
|
echo $raw_depends \
|
|
| tr ',|' '\n' \
|
|
| sed -r 's/^\s*([^[:space:](><=[]+).*$/\1/' \
|
|
| grep -v -E '^\s*$' \
|
|
| sort -u
|
|
}
|
|
|