diff --git a/copy-jdk-configs.spec b/copy-jdk-configs.spec index 5e5af8a..ab7a256 100644 --- a/copy-jdk-configs.spec +++ b/copy-jdk-configs.spec @@ -1,17 +1,21 @@ %global project copy_jdk_configs %global file %{project}.lua +%global fixFile %{project}_fixFiles.sh %global rpm_state_dir %{_localstatedir}/lib/rpm-state Name: copy-jdk-configs -Version: 1.1 -Release: 3%{?dist} +# hash relevant to version tag +%global htag 3f9d6c4448f867a95fb166416a41c45c7e795c10 +Version: 2.0 +Release: 1%{?dist} Summary: JDKs configuration files copier License: BSD -URL: https://hg.fedorahosted.org/hg/%{project} -Source0: https://hg.fedorahosted.org/hg/copy_jdk_configs/raw-file/%{project}-%{version}/%{file} -Source1: https://hg.fedorahosted.org/hg/copy_jdk_configs/raw-file/%{project}-%{version}/LICENSE +URL: https://pagure.io/%{project} +Source0: %{URL}/blob/%{htag}/f/%{file} +Source1: %{URL}/blob/%{htag}/f/LICENSE +Source2: %{URL}/blob/%{htag}/f/%{fixFile} # we need to duplicate msot of the percents in that script so they survive rpm expansion (even in that sed they have to be duplicated) %global pretrans_install %(cat %{SOURCE0} | sed s/%%/%%%%/g | sed s/\\^%%%%/^%%/g) @@ -23,7 +27,7 @@ Requires: lua-posix %description Utility script to transfer JDKs configuration files between updates or for -archiving. +archiving. With script to fix incorrectly created rpmnew files %prep cp -a %{SOURCE1} . @@ -55,6 +59,7 @@ end %install mkdir -p $RPM_BUILD_ROOT/%{_libexecdir} cp -a %{SOURCE0} $RPM_BUILD_ROOT/%{_libexecdir}/%{file} +cp -a %{SOURCE2} $RPM_BUILD_ROOT/%{_libexecdir}/%{fixFile} %posttrans # remove file created in pretrans @@ -63,9 +68,16 @@ rm "%{rpm_state_dir}/%{file}" || : %files %{_libexecdir}/%{file} +%{_libexecdir}/%{fixFile} %license LICENSE %changelog +* Fri Jan 20 2017 Jiri Vanek - 2.0-1 +- moved to new upstream at pagure.io +- moved to newest release 2.0 +- added new script of copy_jdk_configs_fixFiles.sh +- copy_jdk_configs.lua aligned to it + * Fri Jan 08 2016 Jiri Vanek - 1.1-3 - pretrasn lua call now done in pcall (protected call) - also posttrans now always return 0 diff --git a/copy_jdk_configs.lua b/copy_jdk_configs.lua index a8e236b..69dfc41 100755 --- a/copy_jdk_configs.lua +++ b/copy_jdk_configs.lua @@ -15,6 +15,7 @@ local origname = nil local origjavaver = nil local arch = nil local debug = false; +local temp = nil; for i=1,#arg,2 do if (arg[i] == "--help" or arg[i] == "-h") then @@ -33,6 +34,8 @@ for i=1,#arg,2 do print(" Migration/testing switch. Target Mostly same as jvmdir, but you may wont to copy ouside it.") print(" --debug") print(" Enables printing out whats going on. true/false") + print(" --temp") + print(" optional file to save intermediate result - directory configs were copied from") os.exit(0) end if (arg[i] == "--currentjvm") then @@ -59,9 +62,12 @@ for i=1,#arg,2 do debug = true end end + if (arg[i] == "--temp") then + temp=arg[i+1] + end end -if (jvmDestdir == nill) then +if (jvmDestdir == nil) then jvmDestdir = jvmdir end @@ -103,7 +109,8 @@ local caredFiles = {"jre/lib/calendars.properties", "jre/lib/security/java.policy", "jre/lib/security/java.security", "jre/lib/security/local_policy.jar", - "jre/lib/security/nss.cfg,", + "jre/lib/security/nss.cfg", + "jre/lib/security/cacerts", "jre/lib/ext"} function splitToTable(source, pattern) @@ -194,6 +201,16 @@ end latestjvm = jvms[#jvms] +if ( temp ~= nil ) then + src=jvmdir.."/"..latestjvm + if (debug) then + print("temp declared as "..temp.." saving used dir of "..src) + end + file = io.open (temp, "w") + file:write(src) + file:close() +end + for i,file in pairs(caredFiles) do local SOURCE=jvmdir.."/"..latestjvm.."/"..file diff --git a/copy_jdk_configs_fixFiles.sh b/copy_jdk_configs_fixFiles.sh new file mode 100755 index 0000000..b41f66e --- /dev/null +++ b/copy_jdk_configs_fixFiles.sh @@ -0,0 +1,85 @@ +#!/bin/bash +config=$1 +target=$2 + +debug="false" + +#we should be pretty strict about removing once used (even "used" [with fail]) config file, as it may corrupt another installation +clean(){ + debug "cleanup: removing $config" + rm -rf $config +} + +debug(){ + if [ "x$debug" == "xtrue" ] ; then + echo "$1" + fi +} + +if [ "x" == "x$config" ] ; then + debug "no config file specified" + exit 1 +fi + +if [ ! -f "$config" ] ; then + debug "$config file do not exists" + # expected case, when no migration happened + exit 0 +fi + +if [ "x" == "x$target" ] ; then + debug "no target dir specified" + clean + exit 2 +fi + +if [ ! -d "$target" ] ; then + debug "$target is not directory" + clean + exit 22 +fi + +source=`cat $config` + +if [ "x" == "x$source" ] ; then + debug "no information in $config" + clean + exit 3 +fi + +if [ ! -d "$source" ] ; then + debug "$source from $config is not directory" + clean + exit 33 +fi + +debug "source: $source" + +srcName=`basename $source` +targetName=`basename $target` + +files=`find $target | grep "\\.rpmnew$"` +for file in $files ; do + sf1=`echo $file | sed "s/\\.rpmnew$//"` + sf2=`echo $sf1 | sed "s/$targetName/$srcName/"` + # was file modified in origianl installation? + rpm -Vf $source | grep -q $sf2 + if [ $? -gt 0 ] ; then + debug "$sf2 was NOT modified, removing possibly corrupted $sf1 and renaming $file" + rm $sf1 + mv $file $sf1 + if [ $? -eq 0 ] ; then + echo "restored $file to $sf1" + else + echo "FAILED to restore $file to $sf1" + fi + else + debug "$sf2 was modified, keeping $file, and removing the duplicated original" + # information is now backuped, in new directory anyway. Removing future rpmsave to allow rpm -e + rm $sf2 + # or its corresponding backup + rm $sf2.rpmnew + fi +done + +clean