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})
|
%global updatever %(VERSION=%{whole_update}; echo ${VERSION##*u})
|
||||||
# eg jdk8u60-b27 -> b27
|
# eg jdk8u60-b27 -> b27
|
||||||
%global buildver %(VERSION=%{version_tag}; echo ${VERSION##*-})
|
%global buildver %(VERSION=%{version_tag}; echo ${VERSION##*-})
|
||||||
%global rpmrelease 5
|
%global rpmrelease 6
|
||||||
# Define milestone (EA for pre-releases, GA ("fcs") for releases)
|
# Define milestone (EA for pre-releases, GA ("fcs") for releases)
|
||||||
# Release will be (where N is usually a number starting at 1):
|
# Release will be (where N is usually a number starting at 1):
|
||||||
# - 0.N%%{?extraver}%%{?dist} for EA releases,
|
# - 0.N%%{?extraver}%%{?dist} for EA releases,
|
||||||
@ -406,6 +406,9 @@
|
|||||||
%global alternatives_requires %{_sbindir}/alternatives
|
%global alternatives_requires %{_sbindir}/alternatives
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%global family %{name}.%{_arch}
|
||||||
|
%global family_noarch %{name}
|
||||||
|
|
||||||
%if %{with_systemtap}
|
%if %{with_systemtap}
|
||||||
# Where to install systemtap tapset (links)
|
# Where to install systemtap tapset (links)
|
||||||
# We would like these to be in a package specific sub-dir,
|
# We would like these to be in a package specific sub-dir,
|
||||||
@ -423,6 +426,50 @@
|
|||||||
# not-duplicated scriptlets for normal/debug packages
|
# not-duplicated scriptlets for normal/debug packages
|
||||||
%global update_desktop_icons /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
|
%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:
|
%define post_script() %{expand:
|
||||||
update-desktop-database %{_datadir}/applications &> /dev/null || :
|
update-desktop-database %{_datadir}/applications &> /dev/null || :
|
||||||
@ -431,14 +478,18 @@ exit 0
|
|||||||
}
|
}
|
||||||
|
|
||||||
%define alternatives_java_install() %{expand:
|
%define alternatives_java_install() %{expand:
|
||||||
|
if [ "x$debug" == "xtrue" ] ; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
PRIORITY=%{priority}
|
PRIORITY=%{priority}
|
||||||
if [ "%{?1}" == %{debug_suffix} ]; then
|
if [ "%{?1}" == %{debug_suffix} ]; then
|
||||||
let PRIORITY=PRIORITY-1
|
let PRIORITY=PRIORITY-1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ext=.gz
|
ext=.gz
|
||||||
|
key=java
|
||||||
alternatives \\
|
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 %{_jvmdir}/jre jre %{_jvmdir}/%{jredir -- %{?1}} \\
|
||||||
--slave %{_bindir}/%{alt_java_name} %{alt_java_name} %{jrebindir -- %{?1}}/%{alt_java_name} \\
|
--slave %{_bindir}/%{alt_java_name} %{alt_java_name} %{jrebindir -- %{?1}}/%{alt_java_name} \\
|
||||||
--slave %{_bindir}/jjs jjs %{jrebindir -- %{?1}}/jjs \\
|
--slave %{_bindir}/jjs jjs %{jrebindir -- %{?1}}/jjs \\
|
||||||
@ -476,11 +527,17 @@ alternatives \\
|
|||||||
--slave %{_mandir}/man1/unpack200.1$ext unpack200.1$ext \\
|
--slave %{_mandir}/man1/unpack200.1$ext unpack200.1$ext \\
|
||||||
%{_mandir}/man1/unpack200-%{uniquesuffix -- %{?1}}.1$ext
|
%{_mandir}/man1/unpack200-%{uniquesuffix -- %{?1}}.1$ext
|
||||||
|
|
||||||
|
%{set_if_needed_alternatives $key %{family}}
|
||||||
|
|
||||||
for X in %{origin} %{javaver} ; do
|
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
|
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:
|
%define post_headless() %{expand:
|
||||||
@ -513,10 +570,14 @@ exit 0
|
|||||||
|
|
||||||
|
|
||||||
%define postun_headless() %{expand:
|
%define postun_headless() %{expand:
|
||||||
alternatives --remove java %{jrebindir -- %{?1}}/java
|
if [ "x$debug" == "xtrue" ] ; then
|
||||||
alternatives --remove jre_%{origin} %{_jvmdir}/%{jredir -- %{?1}}
|
set -x
|
||||||
alternatives --remove jre_%{javaver} %{_jvmdir}/%{jredir -- %{?1}}
|
fi
|
||||||
alternatives --remove jre_%{javaver}_%{origin} %{_jvmdir}/%{jrelnk -- %{?1}}
|
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:
|
%define posttrans_script() %{expand:
|
||||||
@ -525,14 +586,18 @@ exit 0
|
|||||||
|
|
||||||
|
|
||||||
%define alternatives_javac_install() %{expand:
|
%define alternatives_javac_install() %{expand:
|
||||||
|
if [ "x$debug" == "xtrue" ] ; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
PRIORITY=%{priority}
|
PRIORITY=%{priority}
|
||||||
if [ "%{?1}" == %{debug_suffix} ]; then
|
if [ "%{?1}" == %{debug_suffix} ]; then
|
||||||
let PRIORITY=PRIORITY-1
|
let PRIORITY=PRIORITY-1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ext=.gz
|
ext=.gz
|
||||||
|
key=javac
|
||||||
alternatives \\
|
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 %{_jvmdir}/java java_sdk %{_jvmdir}/%{sdkdir -- %{?1}} \\
|
||||||
--slave %{_bindir}/appletviewer appletviewer %{sdkbindir -- %{?1}}/appletviewer \\
|
--slave %{_bindir}/appletviewer appletviewer %{sdkbindir -- %{?1}}/appletviewer \\
|
||||||
--slave %{_bindir}/clhsdb clhsdb %{sdkbindir -- %{?1}}/clhsdb \\
|
--slave %{_bindir}/clhsdb clhsdb %{sdkbindir -- %{?1}}/clhsdb \\
|
||||||
@ -626,12 +691,17 @@ alternatives \\
|
|||||||
--slave %{_mandir}/man1/xjc.1$ext xjc.1$ext \\
|
--slave %{_mandir}/man1/xjc.1$ext xjc.1$ext \\
|
||||||
%{_mandir}/man1/xjc-%{uniquesuffix -- %{?1}}.1$ext
|
%{_mandir}/man1/xjc-%{uniquesuffix -- %{?1}}.1$ext
|
||||||
|
|
||||||
|
%{set_if_needed_alternatives $key %{family}}
|
||||||
|
|
||||||
for X in %{origin} %{javaver} ; do
|
for X in %{origin} %{javaver} ; do
|
||||||
alternatives \\
|
key=java_sdk_"$X"
|
||||||
--install %{_jvmdir}/java-"$X" java_sdk_"$X" %{_jvmdir}/%{sdkdir -- %{?1}} $PRIORITY --family %{name}.%{_arch}
|
alternatives --install %{_jvmdir}/java-"$X" $key %{_jvmdir}/%{sdkdir -- %{?1}} $PRIORITY --family %{family}
|
||||||
|
%{set_if_needed_alternatives $key %{family}}
|
||||||
done
|
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:
|
%define post_devel() %{expand:
|
||||||
@ -642,10 +712,14 @@ exit 0
|
|||||||
}
|
}
|
||||||
|
|
||||||
%define postun_devel() %{expand:
|
%define postun_devel() %{expand:
|
||||||
alternatives --remove javac %{sdkbindir -- %{?1}}/javac
|
if [ "x$debug" == "xtrue" ] ; then
|
||||||
alternatives --remove java_sdk_%{origin} %{_jvmdir}/%{sdkdir -- %{?1}}
|
set -x
|
||||||
alternatives --remove java_sdk_%{javaver} %{_jvmdir}/%{sdkdir -- %{?1}}
|
fi
|
||||||
alternatives --remove java_sdk_%{javaver}_%{origin} %{_jvmdir}/%{sdkdir -- %{?1}}
|
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 || :
|
update-desktop-database %{_datadir}/applications &> /dev/null || :
|
||||||
|
|
||||||
@ -662,36 +736,49 @@ exit 0
|
|||||||
}
|
}
|
||||||
|
|
||||||
%define alternatives_javadoc_install() %{expand:
|
%define alternatives_javadoc_install() %{expand:
|
||||||
|
if [ "x$debug" == "xtrue" ] ; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
PRIORITY=%{priority}
|
PRIORITY=%{priority}
|
||||||
if [ "%{?1}" == %{debug_suffix} ]; then
|
if [ "%{?1}" == %{debug_suffix} ]; then
|
||||||
let PRIORITY=PRIORITY-1
|
let PRIORITY=PRIORITY-1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
alternatives \\
|
key=javadocdir
|
||||||
--install %{_javadocdir}/java javadocdir %{_javadocdir}/%{uniquejavadocdir -- %{?1}}/api \\
|
alternatives --install %{_javadocdir}/java $key %{_javadocdir}/%{uniquejavadocdir -- %{?1}}/api $PRIORITY --family %{family_noarch}
|
||||||
$PRIORITY --family %{name}
|
%{set_if_needed_alternatives $key %{family_noarch}}
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
%define postun_javadoc() %{expand:
|
%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
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
%define alternatives_javadoczip_install() %{expand:
|
%define alternatives_javadoczip_install() %{expand:
|
||||||
|
if [ "x$debug" == "xtrue" ] ; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
PRIORITY=%{priority}
|
PRIORITY=%{priority}
|
||||||
if [ "%{?1}" == %{debug_suffix} ]; then
|
if [ "%{?1}" == %{debug_suffix} ]; then
|
||||||
let PRIORITY=PRIORITY-1
|
let PRIORITY=PRIORITY-1
|
||||||
fi
|
fi
|
||||||
|
key=javadoczip
|
||||||
alternatives \\
|
alternatives --install %{_javadocdir}/java-zip $key %{_javadocdir}/%{uniquejavadocdir -- %{?1}}.zip $PRIORITY --family %{family_noarch}
|
||||||
--install %{_javadocdir}/java-zip javadoczip %{_javadocdir}/%{uniquejavadocdir -- %{?1}}.zip \\
|
%{set_if_needed_alternatives $key %{family_noarch}}
|
||||||
$PRIORITY --family %{name}
|
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
%define postun_javadoc_zip() %{expand:
|
%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
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2562,6 +2649,19 @@ cjc.mainProgram(args)
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%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
|
* 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
|
- Introduce tests/tests.yml, based on the one in RHEL 8
|
||||||
- Resolves: rhbz#2058487
|
- Resolves: rhbz#2058487
|
||||||
|
Loading…
Reference in New Issue
Block a user