From 5f53a344eacc4aabd753038dc66b27c92cb597d1 Mon Sep 17 00:00:00 2001 From: jonathannewman Date: Tue, 20 Feb 2024 08:10:50 -0800 Subject: [PATCH 1/5] (maint) update README with learnings about composite project behavior This updates the README with some information about behvior that wasn't necessarily obvious, and helpful for composite projects. --- README.md | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6dd0bc36..c459950f 100644 --- a/README.md +++ b/README.md @@ -134,9 +134,24 @@ Note that the symble `:ezbake` is not strictly necessary here. Composite EZBake projects usually do not define their own services but rather provide a list of dependencies which themselves define TK services. Because of this it is not strictly necessary to define a profile such as `:ezbake` shown -above; although it is conceivable that such a composite project may define its -own services, it is unlikely and ill-advised because no one likes blurred lines -in architectural diagrams. Just look at the Leaning Tower of Pisa. +above. + +If the composite project needs to define build time templates, such as `resources/ext/cli_defaults/cli-defaults.sh.erb` +EZbake will only include items that are in jars on the class path at the time +the project is staged. As a result, the project must include a self-referential dependency +in the `ezbake` profile. This will allow ezbake to discover these files correctly. +```clojure +(def my-project-version "0.0.1-SNAPSHOT") + +(defproject somenamespace/myproject my-project-version +... +:profiles { + ... + :ezbake {:dependencies [[mynamespace/myproject ~my-project-version]]} + ... + } +) +``` #### Additional Uberjars From 1c1dd12762e89e62af38265fe212c13b704fc990 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Fri, 22 Mar 2024 11:41:26 +0100 Subject: [PATCH 2/5] Make JAVA_BIN a configuration option Making it a config option allows for differentation. The comment for version 8 was outdated, since puppetserver 8 refuses to start up with Java 8. --- .../puppetlabs/lein-ezbake/template/foss/ext/default.erb | 4 ++-- resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb b/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb index db413b49..29351ff0 100644 --- a/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb +++ b/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb @@ -2,8 +2,8 @@ # Init settings for <%= EZBake::Config[:project] %> ########################################### -# Location of your Java binary (version 8) -JAVA_BIN="/usr/bin/java" +# Location of your Java binary +JAVA_BIN="<%= EZBake::Config[:java_bin] %>" # Modify this if you'd like to change the memory allocation, enable JMX, etc JAVA_ARGS="<%= EZBake::Config[:java_args] %>" diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb index 6b4aadb6..b13f7cf0 100755 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb @@ -14,6 +14,7 @@ options.old_sles = 0 options.sles = 0 options.java = 'java-1.8.0-openjdk-headless' +options.java_bin = '/usr/bin/java' options.release = 1 options.platform_version = 0 options.is_pe = false From d8ea21d716360e826d50d79818de7a6e711e78c6 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Fri, 19 Jul 2024 16:35:21 +0200 Subject: [PATCH 3/5] Move JAVA_BIN to systemd service files The EnvironmentFile paths are config locations so if a user ever modified them, they're not replaced. By defining this in the service file, the packaging will update the location. The result is that even if a java location changes that a simple yum/apt upgrade will respect the new value in most situations. --- resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb | 2 +- .../lein-ezbake/template/global/ext/debian/ezbake.init.erb | 2 ++ .../lein-ezbake/template/global/ext/debian/ezbake.service.erb | 1 + .../lein-ezbake/template/global/ext/redhat/ezbake.service.erb | 1 + 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb b/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb index 29351ff0..92ab885c 100644 --- a/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb +++ b/resources/puppetlabs/lein-ezbake/template/foss/ext/default.erb @@ -3,7 +3,7 @@ ########################################### # Location of your Java binary -JAVA_BIN="<%= EZBake::Config[:java_bin] %>" +#JAVA_BIN="" # Modify this if you'd like to change the memory allocation, enable JMX, etc JAVA_ARGS="<%= EZBake::Config[:java_args] %>" diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.init.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.init.erb index 2624c127..2d0849e6 100755 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.init.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.init.erb @@ -22,6 +22,8 @@ #set default privileges to -rw-r----- umask 027 +JAVA_BIN=<%= EZBake::Config[:java_bin] %> + # You should only need to edit the default/<%= EZBake::Config[:project] %> file and not # this init script directly if [ -r "/etc/default/<%= EZBake::Config[:project] %>" ] ; then diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb index 0da59d3d..96cbe93d 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/debian/ezbake.service.erb @@ -20,6 +20,7 @@ Wants=<%= EZBake::Config[:start_after].map {|dep| "#{dep}.service" }.join(" ") % [Service] Type=forking +Environment=JAVA_BIN="<%= EZBake::Config[:java_bin] %>" EnvironmentFile=/etc/default/<%= EZBake::Config[:project] %> User=<%= EZBake::Config[:user] %> TimeoutStartSec=<%= EZBake::Config[:start_timeout] %> diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb index 0698552e..de91f141 100644 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/redhat/ezbake.service.erb @@ -20,6 +20,7 @@ Wants=<%= EZBake::Config[:start_after].map {|dep| "#{dep}.service" }.join(" ") % [Service] Type=forking +Environment=JAVA_BIN="<%= EZBake::Config[:java_bin] %>" EnvironmentFile=/etc/sysconfig/<%= EZBake::Config[:project] %> User=<%= EZBake::Config[:user] %> TimeoutStartSec=<%= EZBake::Config[:start_timeout] %> From 06851747ec4de513394ae17d3d41e049c541d3bb Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Fri, 22 Mar 2024 11:43:29 +0100 Subject: [PATCH 4/5] Set options.java within the case statements This is a noop refactor, but makes the later diffs easier to read. --- .../lein-ezbake/template/global/ext/fpm.rb | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb index b13f7cf0..8df454c7 100755 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb @@ -183,24 +183,23 @@ elsif options.operating_system == :el && options.os_version >= 7 # systemd el if ! options.is_pe fpm_opts << "--depends tzdata-java" - options.java = - case options.platform_version - when 8 - # rpm on Redhat 7 may not support OR dependencies - if options.os_version == 7 - 'java-11-openjdk-headless' - elsif options.os_version == 8 - '(java-17-openjdk-headless or java-11-openjdk-headless)' - elsif options.os_version == 9 - 'java-17-openjdk-headless' - else - fail "Unrecognized el os version #{options.os_version}" - end - when 6..7 - 'java-1.8.0-openjdk-headless' + case options.platform_version + when 8 + # rpm on Redhat 7 may not support OR dependencies + if options.os_version == 7 + options.java = 'java-11-openjdk-headless' + elsif options.os_version == 8 + options.java = '(java-17-openjdk-headless or java-11-openjdk-headless)' + elsif options.os_version == 9 + options.java = 'java-17-openjdk-headless' else - fail "Unknown Puppet Platform Version #{options.platform_version}" + fail "Unrecognized el os version #{options.os_version}" end + when 6..7 + options.java = 'java-1.8.0-openjdk-headless' + else + fail "Unknown Puppet Platform Version #{options.platform_version}" + end end options.systemd = 1 From 6e7ba9b662044fdd3b0c3c09a6ee555112a6b423 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Fri, 22 Mar 2024 11:50:16 +0100 Subject: [PATCH 5/5] Use virtual Java packages on Red Hat and set java_bin This uses the virtual packages jre-VERSION-headless instead of explicitly openjdk. This allows other JREs to provide the same. It also uses an explicit path to the JRE specific java bin. At least on EL9 this allows the following upgrade path to work: dnf install https://yum.puppet.com/puppet7-release-el-9.noarch.rpm dnf install puppetserver dnf install https://yum.puppet.com/puppet8-release-el-9.noarch.rpm dnf upgrade puppetserver Prior to this patch it would break, because it used /usr/bin/java which will point to Java 8. By using /usr/lib/jvm/jre-17/bin/java we know for sure it is Java 17. --- .../puppetlabs/lein-ezbake/template/global/ext/fpm.rb | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb index 8df454c7..653fb6d9 100755 --- a/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb +++ b/resources/puppetlabs/lein-ezbake/template/global/ext/fpm.rb @@ -182,16 +182,20 @@ options.systemd_el = 1 elsif options.operating_system == :el && options.os_version >= 7 # systemd el if ! options.is_pe + # https://bugzilla.redhat.com/show_bug.cgi?id=2224427 fpm_opts << "--depends tzdata-java" case options.platform_version when 8 # rpm on Redhat 7 may not support OR dependencies if options.os_version == 7 - options.java = 'java-11-openjdk-headless' + options.java = 'jre-11-headless' + options.java_bin = '/usr/lib/jvm/jre-11/bin/java' elsif options.os_version == 8 - options.java = '(java-17-openjdk-headless or java-11-openjdk-headless)' + options.java = '(jre-17-headless or jre-11-headless)' + # TODO: which bin to use? /usr/bin/java may be anything elsif options.os_version == 9 - options.java = 'java-17-openjdk-headless' + options.java = 'jre-17-headless' + options.java_bin = '/usr/lib/jvm/jre-17/bin/java' else fail "Unrecognized el os version #{options.os_version}" end