diff --git a/.copy-jdk-configs.metadata b/.copy-jdk-configs.metadata new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.copy-jdk-configs.metadata diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.gitignore diff --git a/README.md b/README.md deleted file mode 100644 index 98f42b4..0000000 --- a/README.md +++ /dev/null @@ -1,4 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/LICENSE b/SOURCES/LICENSE new file mode 100644 index 0000000..fa6a936 --- /dev/null +++ b/SOURCES/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/SOURCES/copy_jdk_configs.lua b/SOURCES/copy_jdk_configs.lua new file mode 100755 index 0000000..8e8c853 --- /dev/null +++ b/SOURCES/copy_jdk_configs.lua @@ -0,0 +1,240 @@ +#!/usr/bin/lua +-- rpm call +-- lua -- copy_jdk_configs.lua --currentjvm "%{uniquesuffix %{nil}}" --jvmdir "%{_jvmdir %{nil}}" --origname "%{name}" --origjavaver "%{javaver}" --arch "%{_arch}" --debug true +--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 + +-- 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; + +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") + print(" Enables printing out whats going on. true/false") + 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 +end + +if (jvmDestdir == nill) 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 = { } + +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/java.policy", + "jre/lib/security/java.security", + "jre/lib/security/local_policy.jar", + "jre/lib/security/nss.cfg", + "jre/lib/ext"} + +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 + +if (debug) then + print("started") +end; + +foundJvms = posix.dir(jvmdir); +if (foundJvms == nil) then + if (debug) then + print("no, or nothing in "..jvmdir.." exit") + end; + return +end + +if (debug) then + print("found "..#foundJvms.."jvms") +end; + +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 + if (debug) then + print("matched: "..p) + end; + if (currentjvm == p) then + if (debug) then + print("this jdk is already installed. exiting lua script") + end; + return + end ; + table.insert(jvms, p) + else + if (debug) then + print("NOT matched: "..p) + end; + end +end + +if (#jvms <=0) then + if (debug) then + print("no matching jdk in "..jvmdir.." exit") + end; + return +end; + +if (debug) then + print("matched "..#jvms.." jdk in "..jvmdir) +end; + +--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 +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} +chmod 644 $RPM_BUILD_ROOT/%{_libexecdir}/%{file} + +%posttrans +# remove file created in pretrans +# echo "removing %{rpm_state_dir}/%{file}" || : +rm "%{rpm_state_dir}/%{file}" 2> /dev/null || : + +%files +%{_libexecdir}/%{file} +%license LICENSE + +%changelog +* Tue Aug 09 2016 Jiri Vanek - 1.2-1 +- updated to 1,3 which fixing nss minor issue +- Resolves: rhbz#1296430 + +* Tue Jul 12 2016 Jiri Vanek - 1.1-5 +- posttrans silenced, the error is appearing only in state, when there is nothing to copy +- Resolves: rhbz#1296430 + +* Tue Apr 12 2016 Jiri Vanek - 1.1-3 +- commented requires on lua posix to stop blocking composes. +- changed it to 644 to dont mislead by executable flags +- Resolves: rhbz#1296430 + +* Tue Apr 12 2016 Jiri Vanek - 1.1-3 +- inital commit to rhel +- Resolves: rhbz#1296430 + +* Fri Jan 08 2016 Jiri Vanek - 1.1-3 +- pretrasn lua call now done in pcall (protected call) +- also posttrans now always return 0 + +* Wed Dec 16 2015 Jiri Vanek - 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 - 1.1-1 +- initial package