Storing and restoring alternatives during update manually
* Family extracted to globals * Fixing Bug 2001567 - update of JDK/JRE is removing its manually selected alterantives and select (as auto) system JDK/JRE - The move of alternatives creation to posttrans to fix: - Bug 1200302 - dnf reinstall breaks alternatives - Had caused the alternatives to be removed, and then created again, - instead of being added, and then removing the old, and thus persisting - the selection in family - Thus this fix, is storing the family of manually selected master, and if - stored, then it is restoring the family of the master * Resolves: rhbz#2008202
This commit is contained in:
parent
3cc08b65a2
commit
eb9a49f69c
@ -324,7 +324,7 @@
|
||||
%global updatever %(VERSION=%{whole_update}; echo ${VERSION##*u})
|
||||
# eg jdk8u60-b27 -> b27
|
||||
%global buildver %(VERSION=%{version_tag}; echo ${VERSION##*-})
|
||||
%global rpmrelease 5
|
||||
%global rpmrelease 6
|
||||
# Define milestone (EA for pre-releases, GA ("fcs") for releases)
|
||||
# Release will be (where N is usually a number starting at 1):
|
||||
# - 0.N%%{?extraver}%%{?dist} for EA releases,
|
||||
@ -406,6 +406,9 @@
|
||||
%global alternatives_requires %{_sbindir}/alternatives
|
||||
%endif
|
||||
|
||||
%global family %{name}.%{_arch}
|
||||
%global family_noarch %{name}
|
||||
|
||||
%if %{with_systemtap}
|
||||
# Where to install systemtap tapset (links)
|
||||
# We would like these to be in a package specific sub-dir,
|
||||
@ -423,6 +426,50 @@
|
||||
# not-duplicated scriptlets for normal/debug packages
|
||||
%global update_desktop_icons /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
|
||||
|
||||
%define save_alternatives() %{expand:
|
||||
# warning! alternatives are localised!
|
||||
# LANG=cs_CZ.UTF-8 alternatives --display java | head
|
||||
# LANG=en_US.UTF-8 alternatives --display java | head
|
||||
function nonLocalisedAlternativesDisplayOfMaster() {
|
||||
LANG=en_US.UTF-8 alternatives --display "$MASTER"
|
||||
}
|
||||
function headOfAbove() {
|
||||
nonLocalisedAlternativesDisplayOfMaster | head -n $1
|
||||
}
|
||||
MASTER="%{?1}"
|
||||
LOCAL_LINK="%{?2}"
|
||||
FAMILY="%{?3}"
|
||||
rm -f %{_localstatedir}/lib/rpm-state/"$MASTER"_$FAMILY > /dev/null
|
||||
if nonLocalisedAlternativesDisplayOfMaster > /dev/null ; then
|
||||
if headOfAbove 1 | grep -q manual ; then
|
||||
if headOfAbove 2 | tail -n 1 | grep -q %{compatiblename} ; then
|
||||
headOfAbove 2 > %{_localstatedir}/lib/rpm-state/"$MASTER"_"$FAMILY"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
%define save_and_remove_alternatives() %{expand:
|
||||
if [ "x$debug" == "xtrue" ] ; then
|
||||
set -x
|
||||
fi
|
||||
upgrade1_uninstal0=%{?3}
|
||||
if [ "0$upgrade1_uninstal0" -gt 0 ] ; then # removal of this condition will cause persistence between uninstall
|
||||
%{save_alternatives %{?1} %{?2} %{?4}}
|
||||
fi
|
||||
alternatives --remove "%{?1}" "%{?2}"
|
||||
}
|
||||
|
||||
%define set_if_needed_alternatives() %{expand:
|
||||
MASTER="%{?1}"
|
||||
FAMILY="%{?2}"
|
||||
ALTERNATIVES_FILE="%{_localstatedir}/lib/rpm-state/$MASTER"_"$FAMILY"
|
||||
if [ -e "$ALTERNATIVES_FILE" ] ; then
|
||||
rm "$ALTERNATIVES_FILE"
|
||||
alternatives --set $MASTER $FAMILY
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
%define post_script() %{expand:
|
||||
update-desktop-database %{_datadir}/applications &> /dev/null || :
|
||||
@ -431,14 +478,18 @@ exit 0
|
||||
}
|
||||
|
||||
%define alternatives_java_install() %{expand:
|
||||
if [ "x$debug" == "xtrue" ] ; then
|
||||
set -x
|
||||
fi
|
||||
PRIORITY=%{priority}
|
||||
if [ "%{?1}" == %{debug_suffix} ]; then
|
||||
let PRIORITY=PRIORITY-1
|
||||
fi
|
||||
|
||||
ext=.gz
|
||||
key=java
|
||||
alternatives \\
|
||||
--install %{_bindir}/java java %{jrebindir -- %{?1}}/java $PRIORITY --family %{name}.%{_arch} \\
|
||||
--install %{_bindir}/java $key %{jrebindir -- %{?1}}/java $PRIORITY --family %{family} \\
|
||||
--slave %{_jvmdir}/jre jre %{_jvmdir}/%{jredir -- %{?1}} \\
|
||||
--slave %{_bindir}/%{alt_java_name} %{alt_java_name} %{jrebindir -- %{?1}}/%{alt_java_name} \\
|
||||
--slave %{_bindir}/jjs jjs %{jrebindir -- %{?1}}/jjs \\
|
||||
@ -476,11 +527,17 @@ alternatives \\
|
||||
--slave %{_mandir}/man1/unpack200.1$ext unpack200.1$ext \\
|
||||
%{_mandir}/man1/unpack200-%{uniquesuffix -- %{?1}}.1$ext
|
||||
|
||||
%{set_if_needed_alternatives $key %{family}}
|
||||
|
||||
for X in %{origin} %{javaver} ; do
|
||||
alternatives --install %{_jvmdir}/jre-"$X" jre_"$X" %{_jvmdir}/%{jredir -- %{?1}} $PRIORITY --family %{name}.%{_arch}
|
||||
key=jre_"$X"
|
||||
alternatives --install %{_jvmdir}/jre-"$X" $key %{_jvmdir}/%{jredir -- %{?1}} $PRIORITY --family %{family}
|
||||
%{set_if_needed_alternatives $key %{family}}
|
||||
done
|
||||
|
||||
alternatives --install %{_jvmdir}/jre-%{javaver}-%{origin} jre_%{javaver}_%{origin} %{_jvmdir}/%{jrelnk -- %{?1}} $PRIORITY --family %{name}.%{_arch}
|
||||
key=jre_%{javaver}_%{origin}
|
||||
alternatives --install %{_jvmdir}/jre-%{javaver}-%{origin} $key %{_jvmdir}/%{jrelnk -- %{?1}} $PRIORITY --family %{family}
|
||||
%{set_if_needed_alternatives $key %{family}}
|
||||
}
|
||||
|
||||
%define post_headless() %{expand:
|
||||
@ -513,10 +570,14 @@ exit 0
|
||||
|
||||
|
||||
%define postun_headless() %{expand:
|
||||
alternatives --remove java %{jrebindir -- %{?1}}/java
|
||||
alternatives --remove jre_%{origin} %{_jvmdir}/%{jredir -- %{?1}}
|
||||
alternatives --remove jre_%{javaver} %{_jvmdir}/%{jredir -- %{?1}}
|
||||
alternatives --remove jre_%{javaver}_%{origin} %{_jvmdir}/%{jrelnk -- %{?1}}
|
||||
if [ "x$debug" == "xtrue" ] ; then
|
||||
set -x
|
||||
fi
|
||||
post_state=$1 # from postun, https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/#_syntax
|
||||
%{save_and_remove_alternatives java %{jrebindir -- %{?1}}/java $post_state %{family}}
|
||||
%{save_and_remove_alternatives jre_%{origin} %{_jvmdir}/%{jredir -- %{?1}} $post_state %{family}}
|
||||
%{save_and_remove_alternatives jre_%{javaver} %{_jvmdir}/%{jredir -- %{?1}} $post_state %{family}}
|
||||
%{save_and_remove_alternatives jre_%{javaver}_%{origin} %{_jvmdir}/%{jrelnk -- %{?1}} $post_state %{family}}
|
||||
}
|
||||
|
||||
%define posttrans_script() %{expand:
|
||||
@ -525,14 +586,18 @@ exit 0
|
||||
|
||||
|
||||
%define alternatives_javac_install() %{expand:
|
||||
if [ "x$debug" == "xtrue" ] ; then
|
||||
set -x
|
||||
fi
|
||||
PRIORITY=%{priority}
|
||||
if [ "%{?1}" == %{debug_suffix} ]; then
|
||||
let PRIORITY=PRIORITY-1
|
||||
fi
|
||||
|
||||
ext=.gz
|
||||
key=javac
|
||||
alternatives \\
|
||||
--install %{_bindir}/javac javac %{sdkbindir -- %{?1}}/javac $PRIORITY --family %{name}.%{_arch} \\
|
||||
--install %{_bindir}/javac $key %{sdkbindir -- %{?1}}/javac $PRIORITY --family %{family} \\
|
||||
--slave %{_jvmdir}/java java_sdk %{_jvmdir}/%{sdkdir -- %{?1}} \\
|
||||
--slave %{_bindir}/appletviewer appletviewer %{sdkbindir -- %{?1}}/appletviewer \\
|
||||
--slave %{_bindir}/clhsdb clhsdb %{sdkbindir -- %{?1}}/clhsdb \\
|
||||
@ -626,12 +691,17 @@ alternatives \\
|
||||
--slave %{_mandir}/man1/xjc.1$ext xjc.1$ext \\
|
||||
%{_mandir}/man1/xjc-%{uniquesuffix -- %{?1}}.1$ext
|
||||
|
||||
%{set_if_needed_alternatives $key %{family}}
|
||||
|
||||
for X in %{origin} %{javaver} ; do
|
||||
alternatives \\
|
||||
--install %{_jvmdir}/java-"$X" java_sdk_"$X" %{_jvmdir}/%{sdkdir -- %{?1}} $PRIORITY --family %{name}.%{_arch}
|
||||
key=java_sdk_"$X"
|
||||
alternatives --install %{_jvmdir}/java-"$X" $key %{_jvmdir}/%{sdkdir -- %{?1}} $PRIORITY --family %{family}
|
||||
%{set_if_needed_alternatives $key %{family}}
|
||||
done
|
||||
|
||||
update-alternatives --install %{_jvmdir}/java-%{javaver}-%{origin} java_sdk_%{javaver}_%{origin} %{_jvmdir}/%{sdkdir -- %{?1}} $PRIORITY --family %{name}.%{_arch}
|
||||
key=java_sdk_%{javaver}_%{origin}
|
||||
alternatives --install %{_jvmdir}/java-%{javaver}-%{origin} $key %{_jvmdir}/%{sdkdir -- %{?1}} $PRIORITY --family %{family}
|
||||
%{set_if_needed_alternatives $key %{family}}
|
||||
}
|
||||
|
||||
%define post_devel() %{expand:
|
||||
@ -642,10 +712,14 @@ exit 0
|
||||
}
|
||||
|
||||
%define postun_devel() %{expand:
|
||||
alternatives --remove javac %{sdkbindir -- %{?1}}/javac
|
||||
alternatives --remove java_sdk_%{origin} %{_jvmdir}/%{sdkdir -- %{?1}}
|
||||
alternatives --remove java_sdk_%{javaver} %{_jvmdir}/%{sdkdir -- %{?1}}
|
||||
alternatives --remove java_sdk_%{javaver}_%{origin} %{_jvmdir}/%{sdkdir -- %{?1}}
|
||||
if [ "x$debug" == "xtrue" ] ; then
|
||||
set -x
|
||||
fi
|
||||
post_state=$1 # from postun, https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/#_syntax
|
||||
%{save_and_remove_alternatives javac %{sdkbindir -- %{?1}}/javac $post_state %{family}}
|
||||
%{save_and_remove_alternatives java_sdk_%{origin} %{_jvmdir}/%{sdkdir -- %{?1}} $post_state %{family}}
|
||||
%{save_and_remove_alternatives java_sdk_%{javaver} %{_jvmdir}/%{sdkdir -- %{?1}} $post_state %{family}}
|
||||
%{save_and_remove_alternatives java_sdk_%{javaver}_%{origin} %{_jvmdir}/%{sdkdir -- %{?1}} $post_state %{family}}
|
||||
|
||||
update-desktop-database %{_datadir}/applications &> /dev/null || :
|
||||
|
||||
@ -662,36 +736,49 @@ exit 0
|
||||
}
|
||||
|
||||
%define alternatives_javadoc_install() %{expand:
|
||||
if [ "x$debug" == "xtrue" ] ; then
|
||||
set -x
|
||||
fi
|
||||
PRIORITY=%{priority}
|
||||
if [ "%{?1}" == %{debug_suffix} ]; then
|
||||
let PRIORITY=PRIORITY-1
|
||||
fi
|
||||
|
||||
alternatives \\
|
||||
--install %{_javadocdir}/java javadocdir %{_javadocdir}/%{uniquejavadocdir -- %{?1}}/api \\
|
||||
$PRIORITY --family %{name}
|
||||
key=javadocdir
|
||||
alternatives --install %{_javadocdir}/java $key %{_javadocdir}/%{uniquejavadocdir -- %{?1}}/api $PRIORITY --family %{family_noarch}
|
||||
%{set_if_needed_alternatives $key %{family_noarch}}
|
||||
exit 0
|
||||
}
|
||||
|
||||
%define postun_javadoc() %{expand:
|
||||
alternatives --remove javadocdir %{_javadocdir}/%{uniquejavadocdir -- %{?1}}/api
|
||||
if [ "x$debug" == "xtrue" ] ; then
|
||||
set -x
|
||||
fi
|
||||
post_state=$1 # from postun, https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/#_syntax
|
||||
%{save_and_remove_alternatives javadocdir %{_javadocdir}/%{uniquejavadocdir -- %{?1}}/api $post_state %{family_noarch}}
|
||||
exit 0
|
||||
}
|
||||
|
||||
%define alternatives_javadoczip_install() %{expand:
|
||||
if [ "x$debug" == "xtrue" ] ; then
|
||||
set -x
|
||||
fi
|
||||
PRIORITY=%{priority}
|
||||
if [ "%{?1}" == %{debug_suffix} ]; then
|
||||
let PRIORITY=PRIORITY-1
|
||||
fi
|
||||
|
||||
alternatives \\
|
||||
--install %{_javadocdir}/java-zip javadoczip %{_javadocdir}/%{uniquejavadocdir -- %{?1}}.zip \\
|
||||
$PRIORITY --family %{name}
|
||||
key=javadoczip
|
||||
alternatives --install %{_javadocdir}/java-zip $key %{_javadocdir}/%{uniquejavadocdir -- %{?1}}.zip $PRIORITY --family %{family_noarch}
|
||||
%{set_if_needed_alternatives $key %{family_noarch}}
|
||||
exit 0
|
||||
}
|
||||
|
||||
%define postun_javadoc_zip() %{expand:
|
||||
alternatives --remove javadoczip %{_javadocdir}/%{uniquejavadocdir -- %{?1}}.zip
|
||||
if [ "x$debug" == "xtrue" ] ; then
|
||||
set -x
|
||||
fi
|
||||
post_state=$1 # from postun, https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/#_syntax
|
||||
%{save_and_remove_alternatives javadoczip %{_javadocdir}/%{uniquejavadocdir -- %{?1}}.zip $post_state %{family_noarch}}
|
||||
exit 0
|
||||
}
|
||||
|
||||
@ -2562,6 +2649,19 @@ cjc.mainProgram(args)
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Mon Feb 28 2022 Jiri Vanek <jvanek@redhat.com> - 1:1.8.0.322.b06-6
|
||||
- Storing and restoring alternatives during update manually
|
||||
- Family extracted to globals
|
||||
- Fixing Bug 2001567 - update of JDK/JRE is removing its manually selected alterantives and select (as auto) system JDK/JRE
|
||||
-- The move of alternatives creation to posttrans to fix:
|
||||
-- Bug 1200302 - dnf reinstall breaks alternatives
|
||||
-- Had caused the alternatives to be removed, and then created again,
|
||||
-- instead of being added, and then removing the old, and thus persisting
|
||||
-- the selection in family
|
||||
-- Thus this fix, is storing the family of manually selected master, and if
|
||||
-- stored, then it is restoring the family of the master
|
||||
- Resolves: rhbz#2008202
|
||||
|
||||
* Sun Feb 27 2022 Andrew Hughes <gnu.andrew@redhat.com> - 1:1.8.0.322.b06-5
|
||||
- Introduce tests/tests.yml, based on the one in RHEL 8
|
||||
- Resolves: rhbz#2058487
|
||||
|
Loading…
Reference in New Issue
Block a user