Sync from fedora/el8.5

This commit is contained in:
Jiri 2021-06-08 15:49:31 +02:00
parent d9cd335a36
commit 8fa4686806
3 changed files with 377 additions and 325 deletions

View File

@ -6,9 +6,9 @@
Name: copy-jdk-configs
# hash relevant to version tag
%global htag 1d18ce8b5dec47a0468136ab6cdadfb93defe2c4
Version: 3.7
Release: 9%{?dist}
%global htag 88d3ed89f30d8b0eb4877d860fa8d951f224f156
Version: 4.0
Release: 1%{?dist}
Summary: JDKs configuration files copier
License: BSD
@ -24,6 +24,9 @@ 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
@ -72,8 +75,11 @@ rm "%{rpm_state_dir}/%{file}" 2> /dev/null || :
%license LICENSE
%changelog
* Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com> - 3.7-9
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* 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

View File

@ -1,10 +1,78 @@
#!/usr/bin/lua
-- rpm call
-- lua -- copy_jdk_configs.lua --currentjvm "%{uniquesuffix %{nil}}" --jvmdir "%{_jvmdir %{nil}}" --origname "%{name}" --origjavaver "%{javaver}" --arch "%{_arch}" --debug true
-- debug=true lua -- copy_jdk_configs.lua --currentjvm "%{uniquesuffix %{nil}}" --jvmdir "%{_jvmdir %{nil}}" --origname "%{name}" --origjavaver "%{javaver}" --arch "%{_arch}"
--test call
--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" --debug true --jvmDestdir /home/jvanek/Desktop
-- 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 caredFiles = {"jre/lib/calendars.properties",
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",
@ -35,33 +103,33 @@ local caredFiles = {"jre/lib/calendars.properties",
"jre/lib/ext",
"jre/lib/security/blacklist",
"jre/lib/security/javaws.policy",
"jre/lib/security/nss.fips.cfg",
"lib/security",
"conf",
"lib/ext"}
"lib/ext" }
-- before import to allow run from spec
if (arg[1] == "--list") then
for i,file in pairs(caredFiles) do
-- 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
end
-- yum install lua-posix
local posix = require "posix"
-- 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 debug = false;
local temp = nil;
local dry = false;
-- 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
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")
@ -76,7 +144,7 @@ for i=1,#arg,2 do
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")
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")
@ -88,46 +156,45 @@ for i=1,#arg,2 do
os.exit(0)
end
if (arg[i] == "--currentjvm") then
currentjvm=arg[i+1]
currentjvm = arg[i + 1]
end
if (arg[i] == "--jvmdir") then
jvmdir=arg[i+1]
jvmdir = arg[i + 1]
end
if (arg[i] == "--origname") then
origname=arg[i+1]
origname = arg[i + 1]
end
if (arg[i] == "--origjavaver") then
origjavaver=arg[i+1]
origjavaver = arg[i + 1]
end
if (arg[i] == "--arch") then
arch=arg[i+1]
arch = arg[i + 1]
end
if (arg[i] == "--jvmDestdir") then
jvmDestdir=arg[i+1]
jvmDestdir = arg[i + 1]
end
if (arg[i] == "--debug") then
--no string, boolean, workaround
if (arg[i+1] == "true") 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
--no string, boolean, workaround
if (arg[i + 1] == "true") then
dry = true
end
end
if (arg[i] == "--temp") then
temp=arg[i+1]
temp = arg[i + 1]
end
end
end
if (jvmDestdir == nil) then
jvmDestdir = jvmdir
end
if (jvmDestdir == nil) then
jvmDestdir = jvmdir
end
if (debug) then
if (debug) then
print("--currentjvm:");
print(currentjvm);
print("--jvmdir:");
@ -142,187 +209,150 @@ if (debug) then
print(arch);
print("--debug:");
print(debug);
end
local function debugOneLinePrint(string)
if (debug) then
print(string)
end;
end
--trasnform substitute names to lua patterns
local name = string.gsub(string.gsub(origname, "%-", "%%-"), "%.", "%%.")
local javaver = string.gsub(origjavaver, "%.", "%%.")
local jvms = { }
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
--trasnform substitute names to lua patterns
local name = string.gsub(string.gsub(origname, "%-", "%%-"), "%.", "%%.")
local javaver = string.gsub(origjavaver, "%.", "%%.")
function trim(s)
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
local jvms = { }
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
debugOneLinePrint("started")
debugOneLinePrint("started")
foundJvms = posix.dir(jvmdir);
if (foundJvms == nil) then
debugOneLinePrint("no, or nothing in "..jvmdir.." exit")
foundJvms = posix.dir(jvmdir);
if (foundJvms == nil) then
debugOneLinePrint("no, or nothing in " .. jvmdir .. " exit")
return
end
end
debugOneLinePrint("found "..#foundJvms.."jvms")
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)
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")
print(p .. " matched but seems to be debug variant. Skipping")
else
table.insert(jvms, p)
end
else
debugOneLinePrint("NOT matched: "..p)
debugOneLinePrint("NOT matched: " .. p)
end
end
end
if (#jvms <=0) then
debugOneLinePrint("no matching jdk in "..jvmdir.." exit")
if (#jvms <= 0) then
debugOneLinePrint("no matching jdk in " .. jvmdir .. " exit")
return
end;
end ;
debugOneLinePrint("matched "..#jvms.." jdk in "..jvmdir)
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: . -
--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
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
if (l1[x] < l2[x]) then
return true;
end
-- if hunks are equals then move to another pair of hunks
if (l1[x] > l2[x]) then
return false;
end
return a<b
end
-- if hunks are equals then move to another pair of hunks
end
return a < b
end)
end)
if (debug) then
if (debug) then
print("sorted lsit of jvms")
for i,file in pairs(jvms) do
for i, file in pairs(jvms) do
print(file)
end
end
end
latestjvm = jvms[#jvms]
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")
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
end
local readlinkOutput = os.tmpname()
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)
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")
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)
-- 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)
local link = trim(slurp(readlinkOutput))
debugOneLinePrint(" ...link is " .. link)
if (not ((link) == (SOURCE))) then
debugOneLinePrint("WARNING link "..link.." where file "..SOURCE.." expected!")
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)
--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
local exe2 = "cp" .. " -ar " .. link .. " " .. linkDest
dirWithParents(linkDest)
debugOneLinePrint("executing "..exe2)
debugOneLinePrint("executing " .. exe2)
if (not dry) then
os.execute(exe2)
end
end
else
debugOneLinePrint("executing "..exe)
debugOneLinePrint("executing " .. exe)
if (not dry) then
os.execute(exe)
end
end
else
debugOneLinePrint(SOURCE.." does not exists")
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

View File

@ -2,23 +2,38 @@
config=$1
target=$2
debug="false"
rma=""
if [ "x$debug" == "xtrue" ] ; then
rma="-v"
fi
debug(){
if [ "x$debug" == "xtrue" ] ; then
echo "$1"
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"
rm -rf $config
rmDebug -rf $config
}
if [ "x" == "x$config" ] ; then
@ -133,23 +148,23 @@ work(){
if [ $? -gt 0 ] ; then
if [ "X$1" == "Xrpmnew" ] ; then
debug "$sf2 was NOT modified, removing possibly corrupted $sf1 and renaming from $file"
mv $rma -f $file $sf1
mvDebug -f $file $sf1
if [ $? -eq 0 ] ; then
echo "restored $file to $sf1"
else
echo "FAILED to restore $file to $sf1"
debug "FAILED to restore $file to $sf1"
fi
fi
if [ "X$1" == "Xrpmorig" ] ; then
debug "$sf2 was NOT modified, removing possibly corrupted $file"
rm $rma $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
rm -f $rma $sf2
rmDebug -f $sf2
# or its corresponding backup
rm -f $rma $sf2.$1
rmDebug -f $sf2.$1
fi
done
}
@ -169,9 +184,9 @@ files=`find $sourceSearchPath | grep "\\.rpmorig$"`
rpmsaveTarget=`echo $file | sed "s/$srcName/$targetName/"`
debug "relocating $file to $rpmsaveTarget"
if [ -e $rpmsaveTarget ] ; then
rm $rma $file
rmDebug $file
else
mv $rma $file $rpmsaveTarget
mvDebug $file $rpmsaveTarget
fi
done
@ -181,9 +196,9 @@ files=`find $sourceSearchPath | grep "\\.rpmsave$"`
rpmsaveTarget=`echo $file | sed "s/$srcName/$targetName/"`
debug "relocating $file to $rpmsaveTarget"
if [ -e $rpmsaveTarget ] ; then
rm $rma $file
rmDebug $file
else
mv $rma $file $rpmsaveTarget
mvDebug $file $rpmsaveTarget
fi
done
@ -211,20 +226,21 @@ done
debug "cleaning legacy leftowers"
if [ "x$debug" == "xtrue" ] ; then
find $sourceSearchPath -empty -type d -delete
rmdir $rma $sourceSearchPath
else
find $sourceSearchPath -empty -type d -delete 2>/dev/null >/dev/null
rmdir $rma $sourceSearchPath 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"
rm $blackdir/C-J-C_placeholder
rmDebug $blackdir/C-J-C_placeholder
else
debug "nasty $blackdir DONT exists, ignoring again"
fi
done
clean
exit 0