summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-08-01 13:50:43 +0000
committerCoprDistGit <infra@openeuler.org>2024-08-01 13:50:43 +0000
commit5e8c1ddc1e2dd4da325506a35abdd62e590ba2b5 (patch)
tree37b42f4eba376d52c2a087ef45e172f44543dc9a
parentc7f48cfcb06e05eb3026de59685c5d31a21a8675 (diff)
automatic import of copy-jdk-configsopeneuler24.03_LTS
-rw-r--r--LICENSE14
-rw-r--r--copy-jdk-configs.spec180
-rwxr-xr-xcopy_jdk_configs.lua358
-rwxr-xr-xcopy_jdk_configs_fixFiles.sh246
-rw-r--r--sources0
5 files changed, 798 insertions, 0 deletions
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..fa6a936
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,14 @@
+Copyright (c) 2015 Red Hat inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms are permitted
+provided that the above copyright notice and this paragraph are
+duplicated in all such forms and that any documentation,
+advertising materials, and other materials related to such
+distribution and use acknowledge that the software was developed
+by the Red Hat inc. The name of the Red Hat inc. may not be used
+to endorse or promote products derived from this software without
+specific prior written permission. THIS SOFTWARE IS PROVIDED
+``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/copy-jdk-configs.spec b/copy-jdk-configs.spec
new file mode 100644
index 0000000..cf8260b
--- /dev/null
+++ b/copy-jdk-configs.spec
@@ -0,0 +1,180 @@
+%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
+
+# hash relevant to version tag
+%global htag 88d3ed89f30d8b0eb4877d860fa8d951f224f156
+Version: 4.0
+Release: 3%{?dist}
+Summary: JDKs configuration files copier
+
+License: BSD
+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)
+
+BuildArch: noarch
+
+Requires: lua
+Requires: lua-posix
+# rh1965305 - copy-jdk-configs script uses find and xargs but RPM does not depend on them
+Requires: findutils
+OrderWithRequires: findutils
+
+%description
+Utility script to transfer JDKs configuration files between updates or for
+archiving. With script to fix incorrectly created rpmnew files
+
+%prep
+cp -a %{SOURCE1} .
+
+
+%build
+#blob
+
+%pretrans -p <lua>
+function createPretransScript()
+-- the sript must be available during pretrans, so multiply it to tmp
+ os.execute("mkdir -p %{rpm_state_dir}")
+ temp_path="%{rpm_state_dir}/%{file}"
+-- print("generating " .. temp_path)
+ file = io.open(temp_path, "w")
+ file:write([[%{pretrans_install}]])
+ file:close()
+end
+
+-- in netinst, the above call may fail. pcall should save instalation (as there is nothing to copy anyway)
+-- https://bugzilla.redhat.com/show_bug.cgi?id=1295701
+-- todo, decide whether to check for {rpm_state_dir} and skip on not-existing, or keep creating
+if pcall(createPretransScript) then
+-- ok
+else
+-- print("Error running %{name} pretrans.")
+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
+# echo "removing %{rpm_state_dir}/%{file}" || :
+rm "%{rpm_state_dir}/%{file}" 2> /dev/null || :
+
+%files
+%{_libexecdir}/%{file}
+%{_libexecdir}/%{fixFile}
+%license LICENSE
+
+%changelog
+* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 4.0-3
+- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
+ Related: rhbz#1991688
+
+* Tue Jun 08 2021 Fedora Release Engineering <releng@fedoraproject.org> - 4.0-1
+- added requires and orderWithRequires of findutils to provide find and xargs (rh1965305)
+
+* Thu Apr 29 2021 Fedora Release Engineering <releng@fedoraproject.org> - 4.0-0
+- bumped to 4.0 to resolve remvoed rpm 4.17 removing arg from global table
+
+* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.7-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.7-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Tue Jun 30 2020 Andrew Hughes <gnu.andrew@redhat.com> - 3.7-6
+- Rebuilt for lua 5.4.0.
+
+* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.7-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.7-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.7-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.7-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Wed May 02 2018 Jiri Vanek <jvanek@redhat.com> - 3.7-1
+- udpated to latst relase
+- configurable blacklist
+- listed all java keystores
+
+* Wed May 02 2018 Jiri Vanek <jvanek@redhat.com> - 3.3-12
+- blackidrs put on single line
+
+* Wed May 02 2018 Jiri Vanek <jvanek@redhat.com> - 3.3-11
+- added more files to balcklist based on oralce and ibm jdks
+
+* Mon Apr 30 2018 Jiri Vanek <jvanek@redhat.com> - 3.3-10
+- added javaws.policy and blacklist
+
+* Tue Apr 03 2018 Jiri Vanek <jvanek@redhat.com> - 3.3-5
+- fixed rhbz#1541838
+
+* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.3-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Wed Oct 18 2017 Jiri Vanek <jvanek@redhat.com> - 3.3-2
+- added another subdirs for policies files
+
+* Wed Oct 18 2017 Jiri Vanek <jvanek@redhat.com> - 3.3-1
+- handled new paths for policies files
+
+* Thu Oct 05 2017 Jiri Vanek <jvanek@redhat.com> - 3.1-1
+- moved to newest release 3.1 whcih conf and lib/security as directories
+
+* Thu Oct 05 2017 Jiri Vanek <jvanek@redhat.com> - 3.0-1
+- moved to newest release 3.0 whcih support linked configs
+
+* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.3-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Wed Feb 22 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.2.3
+- updated to latest head
+
+* Wed Feb 22 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.2.2
+- added "jre/lib/security/blacklisted.certs" to cared files
+
+* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Fri Feb 03 2017 Jiri Vanek <jvanek@redhat.com> - 2.1-1
+- moved to newest release 2.1
+
+* Fri Jan 20 2017 Jiri Vanek <jvanek@redhat.com> - 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
+
+* Tue Aug 09 2016 Jiri Vanek <jvanek@redhat.com> - 1.2-1
+- updated to 1,3 which fixing nss minor issue
+
+* Tue Jul 12 2016 Jiri Vanek <jvanek@redhat.com> - 1.1-5
+- posttrans silenced, the error is appearing only in state, when there is nothing to copy
+
+* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Fri Jan 08 2016 Jiri Vanek <jvanek@redhat.com> - 1.1-3
+- pretrasn lua call now done in pcall (protected call)
+- also posttrans now always return 0
+
+* Wed Dec 16 2015 Jiri Vanek <jvanek@redhat.com> - 1.1-2
+- package now "installs" also during pretrans, so pretrasn scripts can use it
+- pretrasn "install" is removed in postrans
+
+* Wed Nov 25 2015 Jiri Vanek <jvanek@redhat.com> - 1.1-1
+- initial package
diff --git a/copy_jdk_configs.lua b/copy_jdk_configs.lua
new file mode 100755
index 0000000..57b2592
--- /dev/null
+++ b/copy_jdk_configs.lua
@@ -0,0 +1,358 @@
+#!/usr/bin/lua
+-- rpm call
+-- debug=true lua -- copy_jdk_configs.lua --currentjvm "%{uniquesuffix %{nil}}" --jvmdir "%{_jvmdir %{nil}}" --origname "%{name}" --origjavaver "%{javaver}" --arch "%{_arch}"
+--test call
+-- debug=true lua -- copy_jdk_configs.lua --currentjvm "java-1.8.0-openjdk-1.8.0.65-3.b17.fc22.x86_64" --jvmdir "/usr/lib/jvm" --origname "java-1.8.0-openjdk" --origjavaver "1.8.0" --arch "x86_64" --jvmDestdir /home/jvanek/Desktop
+
+local M = {}
+
+if (os.getenv("debug") == "true") then
+ debug = true;
+else
+ debug = false;
+end
+
+local function debugOneLinePrint(string)
+ if (debug) then
+ print(string)
+ end ;
+end
+
+function getPath(str, sep)
+ sep = sep or '/'
+ return str:match("(.*" .. sep .. ")")
+end
+
+function splitToTable(source, pattern)
+ local i1 = string.gmatch(source, pattern)
+ local l1 = {}
+ for i in i1 do
+ table.insert(l1, i)
+ end
+ return l1
+end
+
+local function slurp(path)
+ local f = io.open(path)
+ local s = f:read("*a")
+ f:close()
+ return s
+end
+
+function trim(s)
+ return (s:gsub("^%s*(.-)%s*$", "%1"))
+end
+
+local function dirWithParents(path)
+ local s = ""
+ local dirs = splitToTable(path, "[^/]+")
+ for i, d in pairs(dirs) do
+ if (i == #dirs) then
+ break
+ end
+ s = s .. "/" .. d
+ local stat2 = posix.stat(s, "type");
+ if (stat2 == nil) then
+ debugOneLinePrint(s .. " does not exists, creating")
+ if (not dry) then
+ posix.mkdir(s)
+ end
+ else
+ debugOneLinePrint(s .. " exists,not creating")
+ end
+ end
+end
+
+
+-- main function,
+-- formelry main body
+-- move to function resolved
+-- https://bugzilla.redhat.com/show_bug.cgi?id=1892224
+-- for readability not indented, todo, indent once tuned
+
+function M.mainProgram(arg)
+ debugOneLinePrint("cjc: lua debug on")
+ local caredFiles = { "jre/lib/calendars.properties",
+ "jre/lib/content-types.properties",
+ "jre/lib/flavormap.properties",
+ "jre/lib/logging.properties",
+ "jre/lib/net.properties",
+ "jre/lib/psfontj2d.properties",
+ "jre/lib/sound.properties",
+ "jre/lib/deployment.properties",
+ "jre/lib/deployment.config",
+ "jre/lib/security/US_export_policy.jar",
+ "jre/lib/security/unlimited/US_export_policy.jar",
+ "jre/lib/security/limited/US_export_policy.jar",
+ "jre/lib/security/policy/unlimited/US_export_policy.jar",
+ "jre/lib/security/policy/limited/US_export_policy.jar",
+ "jre/lib/security/java.policy",
+ "jre/lib/security/java.security",
+ "jre/lib/security/local_policy.jar",
+ "jre/lib/security/unlimited/local_policy.jar",
+ "jre/lib/security/limited/local_policy.jar",
+ "jre/lib/security/policy/unlimited/local_policy.jar",
+ "jre/lib/security/policy/limited/local_policy.jar",
+ "jre/lib/security/nss.cfg",
+ "jre/lib/security/cacerts",
+ "jre/lib/security/blacklisted.certs",
+ "jre/lib/security/jssecacerts",
+ "jre/lib/security/trusted.certs",
+ "jre/lib/security/trusted.jssecerts",
+ "jre/lib/security/trusted.clientcerts",
+ "jre/lib/ext",
+ "jre/lib/security/blacklist",
+ "jre/lib/security/javaws.policy",
+ "jre/lib/security/nss.fips.cfg",
+ "lib/security",
+ "conf",
+ "lib/ext" }
+
+ -- before import to allow run from spec
+ if (arg[1] == "--list") then
+ for i, file in pairs(caredFiles) do
+ print(file)
+ end
+ return 0;
+ end
+
+ -- yum install lua-posix
+ local posix = require "posix"
+
+ -- the one we are installing
+ local currentjvm = nil
+ local jvmdir = nil
+ local jvmDestdir = nil
+ local origname = nil
+ local origjavaver = nil
+ local arch = nil
+ local temp = nil;
+ local dry = false;
+
+ for i = 1, #arg, 2 do
+ if (arg[i] == "--help" or arg[i] == "-h") then
+ print("all but jvmDestdir and debug are mandatory")
+ print(" --currentjvm")
+ print(" NVRA of currently installed java")
+ print(" --jvmdir")
+ print(" Directory where to find this kind of virtual machine. Generally /usr/lib/jvm")
+ print(" --origname")
+ print(" convinient switch to determine jdk. Generally java-1.X.0-vendor")
+ print(" --origjavaver")
+ print(" convinient switch to determine jdk's version. Generally 1.X.0")
+ print(" --arch")
+ print(" convinient switch to determine jdk's arch")
+ print(" --jvmDestdir")
+ print(" Migration/testing switch. Target Mostly same as jvmdir, but you may wont to copy ouside it.")
+ print(" --debug or $debug")
+ print(" Enables printing out whats going on. true/false. False by default")
+ print(" --temp")
+ print(" optional file to save intermediate result - directory configs were copied from")
+ print(" --dry")
+ print(" true/fase if true, then no changes will be written to disk except one tmp file. False by default")
+ print(" **** specil parasm ****")
+ print(" --list")
+ print(" if present on cmdline, list all cared files and exists")
+ os.exit(0)
+ end
+ if (arg[i] == "--currentjvm") then
+ currentjvm = arg[i + 1]
+ end
+ if (arg[i] == "--jvmdir") then
+ jvmdir = arg[i + 1]
+ end
+ if (arg[i] == "--origname") then
+ origname = arg[i + 1]
+ end
+ if (arg[i] == "--origjavaver") then
+ origjavaver = arg[i + 1]
+ end
+ if (arg[i] == "--arch") then
+ arch = arg[i + 1]
+ end
+ if (arg[i] == "--jvmDestdir") then
+ jvmDestdir = arg[i + 1]
+ end
+ if (arg[i] == "--debug") then
+ --no string, boolean, workaround
+ if (arg[i + 1] == "true") then
+ debug = true
+ end
+ end
+ if (arg[i] == "--dry") then
+ --no string, boolean, workaround
+ if (arg[i + 1] == "true") then
+ dry = true
+ end
+ end
+ if (arg[i] == "--temp") then
+ temp = arg[i + 1]
+ end
+ end
+
+ if (jvmDestdir == nil) then
+ jvmDestdir = jvmdir
+ end
+
+ if (debug) then
+ print("--currentjvm:");
+ print(currentjvm);
+ print("--jvmdir:");
+ print(jvmdir);
+ print("--jvmDestdir:");
+ print(jvmDestdir);
+ print("--origname:");
+ print(origname);
+ print("--origjavaver:");
+ print(origjavaver);
+ print("--arch:");
+ print(arch);
+ print("--debug:");
+ print(debug);
+ end
+
+ --trasnform substitute names to lua patterns
+ local name = string.gsub(string.gsub(origname, "%-", "%%-"), "%.", "%%.")
+ local javaver = string.gsub(origjavaver, "%.", "%%.")
+
+ local jvms = { }
+
+ debugOneLinePrint("started")
+
+ foundJvms = posix.dir(jvmdir);
+ if (foundJvms == nil) then
+ debugOneLinePrint("no, or nothing in " .. jvmdir .. " exit")
+ return
+ end
+
+ debugOneLinePrint("found " .. #foundJvms .. " jvms")
+
+ for i, p in pairs(foundJvms) do
+ -- regex similar to %{_jvmdir}/%{name}-%{javaver}*%{_arch} bash command
+ if (string.find(p, name .. "%-" .. javaver .. ".*" .. arch) ~= nil) then
+ debugOneLinePrint("matched: " .. p)
+ if (currentjvm == p) then
+ debugOneLinePrint("this jdk is already installed. exiting lua script")
+ return
+ end ;
+ if (string.match(p, ".*-debug$")) then
+ print(p .. " matched but seems to be debug variant. Skipping")
+ else
+ table.insert(jvms, p)
+ end
+ else
+ debugOneLinePrint("NOT matched: " .. p)
+ end
+ end
+
+ if (#jvms <= 0) then
+ debugOneLinePrint("no matching jdk in " .. jvmdir .. " exit")
+ return
+ end ;
+
+ debugOneLinePrint("matched " .. #jvms .. " jdk in " .. jvmdir)
+
+ --full names are like java-1.7.0-openjdk-1.7.0.60-2.4.5.1.fc20.x86_64
+ table.sort(jvms, function(a, b)
+ -- version-sort
+ -- split on non word: . -
+ local l1 = splitToTable(a, "[^%.-]+")
+ local l2 = splitToTable(b, "[^%.-]+")
+ for x = 1, math.min(#l1, #l2) do
+ local l1x = tonumber(l1[x])
+ local l2x = tonumber(l2[x])
+ if (l1x ~= nil and l2x ~= nil) then
+ --if hunks are numbers, go with them
+ if (l1x < l2x) then
+ return true;
+ end
+ if (l1x > l2x) then
+ return false;
+ end
+ else
+ if (l1[x] < l2[x]) then
+ return true;
+ end
+ if (l1[x] > l2[x]) then
+ return false;
+ end
+ end
+ -- if hunks are equals then move to another pair of hunks
+ end
+ return a < b
+
+ end)
+
+ if (debug) then
+ print("sorted lsit of jvms")
+ for i, file in pairs(jvms) do
+ print(file)
+ end
+ end
+
+ latestjvm = jvms[#jvms]
+
+ if (temp ~= nil) then
+ src = jvmdir .. "/" .. latestjvm
+ debugOneLinePrint("temp declared as " .. temp .. " saving used dir of " .. src)
+ file = io.open(temp, "w")
+ file:write(src)
+ file:close()
+ end
+
+ local readlinkOutput = os.tmpname()
+
+ for i, file in pairs(caredFiles) do
+ local SOURCE = jvmdir .. "/" .. latestjvm .. "/" .. file
+ local DEST = jvmDestdir .. "/" .. currentjvm .. "/" .. file
+ debugOneLinePrint("going to copy " .. SOURCE)
+ debugOneLinePrint("to " .. DEST)
+ local stat1 = posix.stat(SOURCE, "type");
+ if (stat1 ~= nil) then
+ debugOneLinePrint(SOURCE .. " exists")
+ dirWithParents(DEST)
+ -- Copy with -a to keep everything intact
+ local exe = "cp" .. " -ar " .. SOURCE .. " " .. DEST
+ local linkExe = "readlink" .. " -f " .. SOURCE .. " > " .. readlinkOutput
+ debugOneLinePrint("executing " .. linkExe)
+ os.remove(readlinkOutput)
+ os.execute(linkExe)
+ local link = trim(slurp(readlinkOutput))
+ debugOneLinePrint(" ...link is " .. link)
+ if (not ((link) == (SOURCE))) then
+ debugOneLinePrint("WARNING link " .. link .. " where file " .. SOURCE .. " expected!")
+ debugOneLinePrint("Will try to copy link target rather then link itself!")
+ --replacing any NVRA by future NVRA (still execting to have NVRA for any multiple-installable targets
+ -- lua stubbornly consider dash as inteval. Replacing by dot to match X-Y more correct as X.Y rather then not at all
+ local linkDest = string.gsub(link, latestjvm:gsub("-", "."), currentjvm)
+ debugOneLinePrint("attempting to copy " .. link .. " to " .. linkDest)
+ if (link == linkDest) then
+ debugOneLinePrint("Those are identical files! Nothing to do!")
+ else
+ local exe2 = "cp" .. " -ar " .. link .. " " .. linkDest
+ dirWithParents(linkDest)
+ debugOneLinePrint("executing " .. exe2)
+ if (not dry) then
+ os.execute(exe2)
+ end
+ end
+ else
+ debugOneLinePrint("executing " .. exe)
+ if (not dry) then
+ os.execute(exe)
+ end
+ end
+ else
+ debugOneLinePrint(SOURCE .. " does not exists")
+ end
+ end
+
+end --unindented main function
+
+if (arg == nil) then
+ debugOneLinePrint("arg variable is nil, you have to call mainProgram manually") -- this can actually not be invoked, as the debug is set via arg
+else
+ M.mainProgram(arg)
+end
+
+return M
diff --git a/copy_jdk_configs_fixFiles.sh b/copy_jdk_configs_fixFiles.sh
new file mode 100755
index 0000000..7e87be8
--- /dev/null
+++ b/copy_jdk_configs_fixFiles.sh
@@ -0,0 +1,246 @@
+#!/bin/bash
+config=$1
+target=$2
+
+debug(){
+ if [ "x$debug" == "xtrue" ] ; then
+ echo "$@"
+ fi
+}
+
+debug "cjc: bash debug is on"
+
+cmdvDebug() {
+ if [ "x$debug" == "xtrue" ] ; then
+ "$@" -v
+ else
+ "$@" 1>/dev/null 2>&1
+ fi
+}
+
+mvDebug() {
+ cmdvDebug mv "$@"
+}
+
+rmDebug() {
+ cmdvDebug rm "$@"
+}
+
+rmdirDebug() {
+ cmdvDebug rmdir "$@"
+}
+
+#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"
+ rmDebug -rf $config
+}
+
+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
+
+
+listLinks(){
+ find $1 -type l -print0 | xargs -0 ls -ld | sed "s; \+-> \+;_->_;g" | sed "s;.* $1;$1;"
+}
+
+printIfExists(){
+ if [ -e $ffileCandidate ] ; then
+ echo $1
+ else
+ # stdout can be captured, therefore stderr
+ debug "skipping not-existing link-target-dir $1" 1>&2
+ fi
+}
+
+createListOfLinksTargetsDirectories(){
+ pushd $source >/dev/null 2>&1
+ local links=`listLinks $1`
+ for x in $links ; do
+ echo "$x" | grep "jre-abrt" > /dev/null
+ if [ $? -eq 0 ] ; then
+ continue
+ fi
+ local ffileCandidate=$(echo $x | sed "s/.*_->_//") ;
+# ignoring relative paths as they may lead who know where later
+# there can be simlink relative to position, so push is not catching all
+ if [ "$ffileCandidate" != "${ffileCandidate#/}" ] ; then
+ if [ -d $ffileCandidate ] ; then
+# should we accept the links to directories themselves?
+ printIfExists $ffileCandidate
+ else
+ printIfExists `dirname $ffileCandidate`
+ fi
+ fi
+ done | sort | uniq
+ popd >/dev/null 2>&1
+}
+
+sourceLinks=`listLinks $source`
+targetLinks=`listLinks $target`
+sourceLinksDirsTarget=`createListOfLinksTargetsDirectories $source`
+targetLinksDirsTarget=`createListOfLinksTargetsDirectories $target`
+
+debug "source: $source"
+debug "target: $target"
+
+debug "sourceLinks:
+$sourceLinks"
+debug "targetLinks:
+$targetLinks"
+
+debug "sourceLinksDirsTarget:
+$sourceLinksDirsTarget"
+debug "targetLinksDirsTarget:
+$targetLinksDirsTarget"
+
+sourceSearchPath="$source $sourceLinksDirsTarget"
+targetSearchPath="$target $targetLinksDirsTarget"
+
+work(){
+ if [ "X$1" == "Xrpmnew" -o "X$1" == "Xrpmorig" ] ; then
+ debug "Working with $1 (1)"
+ else
+ debug "unknown parameter: $1"
+ return 1
+ fi
+
+ local files=`find $targetSearchPath | grep "\\.$1$"`
+ for file in $files ; do
+ local sf1=`echo $file | sed "s/\\.$1$//"`
+ local sf2=`echo $sf1 | sed "s/$targetName/$srcName/"`
+ # was file modified in origianl installation?
+ rpm -Vf $source | grep -q $sf2
+ if [ $? -gt 0 ] ; then
+ if [ "X$1" == "Xrpmnew" ] ; then
+ debug "$sf2 was NOT modified, removing possibly corrupted $sf1 and renaming from $file"
+ mvDebug -f $file $sf1
+ if [ $? -eq 0 ] ; then
+ echo "restored $file to $sf1"
+ else
+ debug "FAILED to restore $file to $sf1"
+ fi
+ fi
+ if [ "X$1" == "Xrpmorig" ] ; then
+ debug "$sf2 was NOT modified, removing possibly corrupted $file"
+ rmDebug $file
+ 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
+ rmDebug -f $sf2
+ # or its corresponding backup
+ rmDebug -f $sf2.$1
+ fi
+done
+}
+
+
+srcName=`basename $source`
+targetName=`basename $target`
+
+work rpmnew
+work rpmorig
+
+debug "Working with rpmorig (2)"
+# simply moving old rpmsaves to new dir
+# fix for config (replace) leftovers
+files=`find $sourceSearchPath | grep "\\.rpmorig$"`
+ for file in $files ; do
+ rpmsaveTarget=`echo $file | sed "s/$srcName/$targetName/"`
+ debug "relocating $file to $rpmsaveTarget"
+ if [ -e $rpmsaveTarget ] ; then
+ rmDebug $file
+ else
+ mvDebug $file $rpmsaveTarget
+ fi
+ done
+
+debug "Working with rpmsave (1)"
+files=`find $sourceSearchPath | grep "\\.rpmsave$"`
+ for file in $files ; do
+ rpmsaveTarget=`echo $file | sed "s/$srcName/$targetName/"`
+ debug "relocating $file to $rpmsaveTarget"
+ if [ -e $rpmsaveTarget ] ; then
+ rmDebug $file
+ else
+ mvDebug $file $rpmsaveTarget
+ fi
+ done
+
+
+#warning: file /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64-debug/jre/lib/applet: remove failed: No such file or directory
+#warning: file /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64-debug/jre/lib/amd64/client: remove failed: No such file or directory
+#warning: file /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.171-2.6.13.2.el7.x86_64/jre/lib/amd64/xawt: remove failed: No such file or directory
+#those dirs might be mepty by installtion, filling to not be rmeoved later
+#use exported CJC_BLACKDIRS_ADD to extend it in runtime/spec file
+blackdirs=""
+internal_blackdirs="jre/lib/applet jre/lib/*/client jre/lib/locale/*/LC_MESSAGES jre/lib/*/xawt jre/javaws properties/version properties jre/lib/endorsed jre/lib/boot lib/missioncontrol/p2/org.eclipse.equinox.p2.engine/profileRegistry/JMC.profile/.data"
+for x in $internal_blackdirs $CJC_BLACKDIRS_ADD ; do
+ blackdirs="$blackdirs $source/$x"
+done
+
+for blackdir in $blackdirs; do
+ if [ -e $blackdir ] ; then
+ debug "nasty $blackdir exists, filling"
+ touch $blackdir/C-J-C_placeholder
+ else
+ debug "nasty $blackdir DONT exists, ignoring"
+ fi
+done
+
+debug "cleaning legacy leftowers"
+if [ "x$debug" == "xtrue" ] ; then
+ find $sourceSearchPath -empty -type d -delete
+else
+ find $sourceSearchPath -empty -type d -delete 2>/dev/null >/dev/null
+fi
+rmdirDebug $sourceSearchPath
+
+# and remove placeholders
+for blackdir in $blackdirs; do
+ if [ -e $blackdir ] ; then
+ debug "nasty $blackdir exists, cleaning placeholder"
+ rmDebug $blackdir/C-J-C_placeholder
+ else
+ debug "nasty $blackdir DONT exists, ignoring again"
+ fi
+done
+
+clean
+
+exit 0
diff --git a/sources b/sources
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sources