1 /* 2 * Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Amazon designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 */ 21 22 plugins { 23 id 'com.netflix.nebula.ospackage' version 'latest.release' 24 } 25 26 dependencies { 27 compile project(path: ':installers:linux:universal:tar', configuration: 'archives') 28 } 29 30 ext { 31 switch (project.correttoArch) { 32 case 'aarch64': 33 arch_deb = 'arm64' 34 break; 35 case 'x86': 36 arch_deb = "i386" 37 break 38 case 'x64': 39 arch_deb = 'amd64' 40 break 41 } 42 } 43 44 def jvmDir = '/usr/lib/jvm' 45 def jdkInstallationDirName = "java-${project.version.major}-amazon-corretto" 46 def jdkHome = "${jvmDir}/${jdkInstallationDirName}".toString() 47 def jdkBinaryDir = "${buildRoot}/${project.correttoJdkArchiveName}" 48 def jdkPackageName = "java-${project.version.major}-amazon-corretto-jdk" 49 50 def alternativesPriority = String.format("1%2s%2s%3s", project.version.major, project.version.minor, project.version.security).replace(' ', '0') 51 52 def jinfoName = ".${jdkInstallationDirName}.jinfo" 53 54 ospackage { 55 // Valid version must start with a digit and only contain [A-Za-z0-9.+:~-] 56 // See http://manpages.ubuntu.com/manpages/artful/en/man5/deb-version.5.html 57 version = project.version.upstream 58 release = project.version.revision 59 60 url = "${packageInfo.url}" 61 vendor = "${packageInfo.vendor}" 62 packager = "${packageInfo.packager}" 63 license = "${packageInfo.license}" 64 buildHost = "${packageInfo.buildHost}" 65 maintainer = "${packageInfo.maintainer}" 66 packageGroup = 'java' 67 priority = 'optional' 68 user = 'root' 69 permissionGroup = 'root' 70 epoch = 1 71 arch = arch_deb 72 multiArch = SAME 73 } 74 75 /** 76 * Uncompress and copy the universal Corretto artifact 77 * tar for DEB packaging. 78 */ 79 task extractUniversalTar(type: Copy) { 80 dependsOn project.configurations.compile 81 from tarTree(project.configurations.compile.singleFile) 82 into buildRoot 83 } 84 85 /** 86 * Populate version numbers, java home and alternatives 87 * priority to postin_jdk.sh.template and preun_jdk.sh.template. 88 * Create script copies under build root scripts folder. 89 */ 90 task inflateDebScriptTemplate(type: Copy) { 91 dependsOn extractUniversalTar 92 // In trusty repo, openjdk7 has priority 1071 and openjdk6 has 1061 93 // Corretto uses the same priority in both rpm and deb 94 def priority = 95 from('scripts') { 96 include '**/*.template' 97 rename { file -> file.replace('.template', '') } 98 filter(org.apache.tools.ant.filters.ReplaceTokens, 99 tokens: project.version + [java_home: jdkHome, alternatives_priority: alternativesPriority, 100 jdk_tools: jdkTools.join(' ')]) 101 } 102 into "${buildRoot}/scripts" 103 } 104 105 /** 106 * Inflate jinfo file used by update-java-alternatives command. 107 * Create script copy under buildRoot/jinfo folder. See 108 * http://manpages.ubuntu.com/manpages/xenial/man8/update-java-alternatives.8.html#files 109 */ 110 task inflateJinfoTemplate(type: Copy) { 111 from('jinfo') { 112 include '**/*.template' 113 rename('jinfo.template', jinfoName) 114 filter(org.apache.tools.ant.filters.ReplaceTokens, 115 tokens: project.version + [java_home : jdkHome, alternatives_priority: alternativesPriority, 116 directory_name: jdkInstallationDirName.toString()]) 117 expand(jdk_tools: jdkTools) 118 } 119 into "${buildRoot}/jinfo" 120 } 121 122 /** 123 * Generate DEB for JDK, with package published under 124 * distributions folder. 125 */ 126 task generateJdkDeb(type: Deb) { 127 description = 'Create the DEB package for Corretto JDK' 128 dependsOn inflateDebScriptTemplate 129 dependsOn inflateJinfoTemplate 130 131 packageName = jdkPackageName 132 packageDescription = "Amazon Corretto\'s packaging of the OpenJDK ${project.version.major} code." 133 summary = "Amazon Corretto ${project.version.major} development environment" 134 135 postInstall file("$buildRoot/scripts/postin_jdk.sh") 136 preUninstall file("$buildRoot/scripts/preun_jdk.sh") 137 138 requires('java-common') 139 requires('zlib1g') 140 // jdk 141 provides('java-compiler') 142 provides('java-sdk') 143 provides('java5-sdk') 144 provides('java6-sdk') 145 provides('java7-sdk') 146 provides('java7-jdk') 147 provides('java8-jdk') 148 provides('java11-sdk') 149 17.upto(project.version.major.toInteger()) { 150 provides("java${it}-sdk") 151 } 152 // TODO: Move this to the jre when splitting the fat deb 153 provides('java-runtime') 154 provides('java5-runtime') 155 provides('java6-runtime') 156 provides('java7-runtime') 157 provides('java8-runtime') 158 provides('java11-runtime') 159 17.upto(project.version.major.toInteger()) { 160 provides("java${it}-runtime") 161 } 162 // TODO: Move this to the headless jre when splitting the fat deb 163 provides('java-runtime-headless') 164 provides('java5-runtime-headless') 165 provides('java6-runtime-headless') 166 provides('java7-runtime-headless') 167 provides('java8-runtime-headless') 168 provides('java11-runtime-headless') 169 17.upto(project.version.major.toInteger()) { 170 provides("java${it}-runtime-headless") 171 } 172 173 from(jdkBinaryDir) { 174 include(project.configurationFiles) 175 // Deb actually uses configuationFile and not fileType see https://github.com/nebula-plugins/gradle-ospackage-plugin/issues/118#issuecomment-656004360 176 // Path must be the fully qualified install path 177 configurationFile = project.configurationFiles.collect{ "${jdkHome}/${it}" }.join("\n") 178 into jdkHome 179 } 180 181 from(jdkBinaryDir) { 182 into jdkHome 183 exclude 'legal' 184 exclude(project.configurationFiles) 185 } 186 187 // Copy legal directory specifically to set permission correctly. 188 // See https://github.com/corretto/corretto-11/issues/129 189 from("${jdkBinaryDir}/legal") { 190 into "${jdkHome}/legal" 191 fileMode = 0444 192 } 193 194 if (!project.excludeReadmeJavaSE) { 195 from("${jdkBinaryDir}/README.JAVASE") { 196 into jdkHome 197 fileMode = 0444 198 } 199 } 200 201 from("${buildRoot}/jinfo") { 202 include '**/*.jinfo' 203 into jvmDir 204 } 205 } 206 207 artifacts { 208 archives generateJdkDeb 209 }