Add package translation
This commit is contained in:
179
installJRMC
179
installJRMC
@@ -163,7 +163,7 @@ init() {
|
||||
PKG_ALIASES["tigervnc-server"]="tigervnc-standalone-server"
|
||||
fi
|
||||
|
||||
# Install script dependencies
|
||||
# Install dependency dependencies :-)
|
||||
[[ "$ID" == "centos" ]] && installPackage epel-release
|
||||
|
||||
# Select MC version to work with
|
||||
@@ -389,7 +389,7 @@ getLatestVersion() {
|
||||
|
||||
# Use a containerized package manager
|
||||
# TODO but how to determine build distro ($_base=buster)?
|
||||
[[ ! -x $(command -v buildah) ]] && installPackage --silent buildah
|
||||
installPackage --silent buildah
|
||||
if [[ -x $(command -v buildah) ]] && CNT=$(buildah from debian:$_base); then
|
||||
buildah run "$CNT" -- bash -c \
|
||||
"echo 'deb [trusted=yes arch=amd64,i386,armhf,arm64] http://dist.jriver.com/latest/mediacenter/ $_base main' > /etc/apt/sources.list 2>&1"
|
||||
@@ -606,13 +606,105 @@ acquireDeb() {
|
||||
}
|
||||
|
||||
|
||||
#######################################
|
||||
# Translate deb package dependencies for each distro
|
||||
#######################################
|
||||
packageTranslations() {
|
||||
|
||||
declare -ga requires recommends
|
||||
|
||||
# Load deb dependencies into array
|
||||
IFS=',' read -ra requires <<< "$(dpkg-deb -f "$DEBFILENAME" Depends)"
|
||||
IFS=',' read -ra recommends <<< "$(dpkg-deb -f "$DEBFILENAME" Recommends)"
|
||||
|
||||
# Clean up formatting
|
||||
for i in "${!requires[@]}"; do
|
||||
requires[$i]="${requires[$i]%%|*}"
|
||||
requires[$i]="${requires[$i]/?:/}"
|
||||
requires[$i]="${requires[$i]# }"
|
||||
requires[$i]="${requires[$i]% }"
|
||||
requires[$i]="${requires[$i]//\(/}"
|
||||
requires[$i]="${requires[$i]//)/}"
|
||||
done
|
||||
|
||||
# Translate package names
|
||||
case "$ID" in
|
||||
fedora|centos)
|
||||
requires=("${requires[@]/libc6/glibc}")
|
||||
requires=("${requires[@]/libasound2/alsa-lib}")
|
||||
requires=("${requires[@]/libuuid1/libuuid}")
|
||||
requires=("${requires[@]/libX11-6/libX11}")
|
||||
requires=("${requires[@]/libext6/libXext}")
|
||||
requires=("${requires[@]/libxcb1/libxcb}")
|
||||
requires=("${requires[@]/libxdmcp6/libXdmcp}")
|
||||
requires=("${requires[@]/libstdc++6/libstdc++}")
|
||||
requires=("${requires[@]/libgtk-3-0/gtk3}")
|
||||
requires=("${requires[@]/libgl1-mesa-glx/mesa-libGL}")
|
||||
requires=("${requires[@]/libpango-1.0-0/pango}")
|
||||
requires=("${requires[@]/libpangoft2-1.0-0/pango}")
|
||||
requires=("${requires[@]/libpangox-1.0-0/pango}")
|
||||
requires=("${requires[@]/libpangoxft-1.0-0/pango}")
|
||||
requires=("${requires[@]/libnss3/nss}")
|
||||
requires=("${requires[@]/libnspr4/nspr}")
|
||||
requires=("${requires[@]/libgomp1/libgomp}")
|
||||
requires=("${requires[@]/libfribidi0/fribidi}")
|
||||
requires=("${requires[@]/libfontconfig1/fontconfig}")
|
||||
requires=("${requires[@]/libfreetype6/freetype}")
|
||||
requires=("${requires[@]/libharfbuzz0b/harfbuzz}")
|
||||
requires=("${requires[@]/libgbm1/mesa-libgbm}")
|
||||
requires=("${requires[@]/libva2/libva}")
|
||||
requires=("${requires[@]/libepoxy0/libepoxy}")
|
||||
requires=("${requires[@]/liblcms2-2/lcms2}")
|
||||
requires=("${requires[@]/libvulkan1/vulkan-loader}")
|
||||
requires=("${requires[@]/libepoxy0/libepoxy}")
|
||||
;;
|
||||
opensuse.*)
|
||||
requires=("${requires[@]/libc6/glibc}")
|
||||
requires=("${requires[@]/libasound2/alsa-lib}")
|
||||
requires=("${requires[@]/libuuid1/libuuid}")
|
||||
requires=("${requires[@]/libext6/libXext6}")
|
||||
requires=("${requires[@]/libxdmcp6/libXdmcp6}")
|
||||
requires=("${requires[@]/libgtk-3-0/gtk3}")
|
||||
requires=("${requires[@]/libgl1-mesa-glx/Mesa-libGL1}")
|
||||
requires=("${requires[@]/libpango-1.0-0/pango}")
|
||||
requires=("${requires[@]/libpangoft2-1.0-0/pango}")
|
||||
requires=("${requires[@]/libpangox-1.0-0/pango}")
|
||||
requires=("${requires[@]/libpangoxft-1.0-0/pango}")
|
||||
requires=("${requires[@]/libnss3/mozilla-nss}")
|
||||
requires=("${requires[@]/libnspr4/mozilla-nspr}")
|
||||
requires=("${requires[@]/libfribidi0/fribidi}")
|
||||
requires=("${requires[@]/libfontconfig1/fontconfig}")
|
||||
requires=("${requires[@]/libfreetype6/freetype}")
|
||||
requires=("${requires[@]/libharfbuzz0b/libharfbuzz0}")
|
||||
;;
|
||||
esac
|
||||
|
||||
# Remove duplicates
|
||||
declare -A dupes
|
||||
for i in "${requires[@]}"; do
|
||||
if [[ ! -v dupes[${i%% *}] ]]; then
|
||||
cleaned_requires+=("$i")
|
||||
fi
|
||||
dupes["${i%% *}"]=1
|
||||
done
|
||||
requires=("${cleaned_requires[@]}")
|
||||
|
||||
# Convert array to newline delim'd string (for heredoc)
|
||||
printf -v requires "Requires: %s\n" "${requires[@]}"
|
||||
printf -v recommends "Recommends: %s\n" "${recommends[@]}"
|
||||
# Strip last newline
|
||||
requires="${requires%?}"
|
||||
recommends="${recommends%?}"
|
||||
}
|
||||
|
||||
|
||||
#######################################
|
||||
# Creates a SPEC file and builds the RPM from the source DEB using rpmbuild
|
||||
#######################################
|
||||
buildRPM() {
|
||||
debug "Running: ${FUNCNAME[0]}"
|
||||
|
||||
local _build_requires _global_requires _custom_requires _ec
|
||||
local _ec
|
||||
|
||||
declare -g _mcrpm="$_outputdir/RPMS/x86_64/MediaCenter-$_mcversion.x86_64.rpm"
|
||||
|
||||
@@ -622,79 +714,11 @@ buildRPM() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
# install build dependencies
|
||||
installPackage "wget" "dpkg" "rpm-build"
|
||||
|
||||
[[ ! -d "$_outputdir/SPECS" ]] && mkdir -p "$_outputdir/SPECS"
|
||||
|
||||
# rpmbuild uses rpm to check for build dependencies
|
||||
# this will fail on non-rpm distros
|
||||
if [[ "$ID" =~ ^(fedora|centos|opensuse.*)$ ]]; then
|
||||
_build_requires=$'BuildRequires: rpm >= 4.11.0\nBuildRequires: dpkg'
|
||||
fi
|
||||
|
||||
read -r -d '' _global_requires <<- 'EOF'
|
||||
Requires: glibc >= 2.28
|
||||
Requires: alsa-lib >= 1.1.8
|
||||
Requires: gtk3 >= 3.24
|
||||
Requires: pango >= 1.42
|
||||
Requires: python3
|
||||
Requires: xdg-utils
|
||||
Requires: fribidi >= 1.0.5
|
||||
Requires: fontconfig >= 2.13
|
||||
Requires: lcms2 >= 2.9
|
||||
Requires: vulkan-headers >= 1.1
|
||||
Requires: ca-certificates
|
||||
Requires: libXScrnSaver
|
||||
Recommends: vorbis-tools >= 1.4.0
|
||||
Recommends: lame >= 3.0
|
||||
EOF
|
||||
|
||||
# SUSE dependency name variations
|
||||
if [[ "$ID" =~ ^opensuse.*$ || -v _build_suse ]]; then
|
||||
read -r -d '' _custom_requires <<- 'EOF'
|
||||
Requires: Mesa-libVulkan-devel
|
||||
Requires: freetype >= 1.3.1
|
||||
Requires: libharfbuzz0 >= 2.3.1
|
||||
Requires: libX11-6 >= 1.6
|
||||
Requires: libX11-data >= 1.6
|
||||
Requires: libXdmcp6 >= 1.1
|
||||
Requires: libXext6 >= 1.3
|
||||
Requires: libepoxy0 >= 1.5.3
|
||||
Requires: libgomp1 >= 7.4
|
||||
Requires: libstdc++6 >= 7.4
|
||||
Requires: libuuid1 >= 2.33
|
||||
Requires: libva2 >= 2.4.0
|
||||
Requires: libxcb1 >= 1.1
|
||||
Requires: libgbm1 >= 18.3.6
|
||||
Requires: mozilla-nspr >= 4.20
|
||||
Requires: mozilla-nss >= 3.42
|
||||
EOF
|
||||
else
|
||||
read -r -d '' _custom_requires <<- 'EOF'
|
||||
Requires: mesa-vulkan-drivers
|
||||
Requires: freetype >= 2.9.1
|
||||
Requires: harfbuzz >= 2.3.1
|
||||
Requires: libX11 >= 1.6
|
||||
Requires: libX11-common >= 1.6
|
||||
Requires: libXdmcp >= 1.1
|
||||
Requires: libXext >= 1.3
|
||||
Requires: libepoxy >= 1.5.3
|
||||
Requires: libgomp >= 7.4
|
||||
Requires: libstdc++ >= 7.4
|
||||
Requires: libuuid >= 2.33
|
||||
Requires: libva >= 2.4.0
|
||||
Requires: libxcb >= 1.1
|
||||
Requires: mesa-libgbm >= 18.3.6
|
||||
Requires: nspr >= 4.20
|
||||
Requires: nss >= 3.42
|
||||
EOF
|
||||
fi
|
||||
|
||||
if [[ -v _compat ]]; then
|
||||
# Strip minimum versions
|
||||
_custom_requires=$(echo "$_custom_requires" | awk -F" " 'NF == 4 {print $1 " " $2} NF != 4 {print $0}')
|
||||
_global_requires=$(echo "$_global_requires" | awk -F" " 'NF == 4 {print $1 " " $2} NF != 4 {print $0}')
|
||||
requires=$(echo "$requires" | awk -F" " 'NF == 4 {print $1 " " $2} NF != 4 {print $0}')
|
||||
fi
|
||||
|
||||
# Create spec file
|
||||
@@ -705,14 +729,13 @@ buildRPM() {
|
||||
Summary: JRiver Media Center
|
||||
Group: Applications/Media
|
||||
Source0: http://files.jriver.com/mediacenter/channels/v$_mversion/latest/MediaCenter-$_mcversion-amd64.deb
|
||||
${_build_requires:-}
|
||||
BuildArch: x86_64
|
||||
%define _rpmfilename %%{ARCH}/%%{NAME}-%%{version}.%%{ARCH}.rpm
|
||||
|
||||
AutoReq: 0
|
||||
|
||||
${_global_requires:-}
|
||||
${_custom_requires:-}
|
||||
${requires:-}
|
||||
${recommends:-}
|
||||
|
||||
Provides: mediacenter$_mversion
|
||||
|
||||
@@ -1466,9 +1489,13 @@ main() {
|
||||
# Build RPM from source deb package
|
||||
if [[ -v _build ]]; then
|
||||
acquireDeb
|
||||
installPackage "wget" "dpkg" "rpm-build"
|
||||
packageTranslations
|
||||
|
||||
if ! buildRPM; then
|
||||
err "Build failed."
|
||||
# For automation, let's remove the source DEB and reaquire it on next run in case it is corrupted or buggy
|
||||
# For automation, let's remove the source DEB and reaquire it on next run
|
||||
# after failure in case it is corrupted or buggy
|
||||
[[ -f "$DEBFILENAME" ]] && echo "Removing source DEB" && rm -f "$DEBFILENAME"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user