Skip to content

Commit

Permalink
Added RPM package generation and upload (#37)
Browse files Browse the repository at this point in the history
* Added RPM package generation and upload
* Added documentation on control scripts

Signed-off-by: Ben Clark <ben@benjyc.uk>
  • Loading branch information
BClark09 committed Feb 26, 2017
1 parent e873045 commit be9ca42
Show file tree
Hide file tree
Showing 5 changed files with 264 additions and 151 deletions.
303 changes: 166 additions & 137 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,12 @@ def architectures = [
'arm64'
]

def packageTypes = [
'Deb',
'Rpm'
]

ospackage {
arch = "${OSPACKAGE_ARCH}"
os = LINUX
packager = "https://github.com/openhab/openhab-linuxpkg"
maintainer = "https://community.openhab.org"
Expand Down Expand Up @@ -149,151 +153,176 @@ def distributions = [
]

def generate_distro_tasks = { dist, gDescription, gPackageName, gInputFile, gVersion, gRelease, gDebDist ->
task "distro-${dist}"(type: Deb, dependsOn: "download-${dist}") {
release = gRelease
packageName = gPackageName
version = gVersion
distribution = gDebDist
packageDescription = gDescription

/**
* Suck up all the empty directories that we need to install into the path.
*/
Closure suckUpEmptyDirectories = { path, u, g, mode ->
into(path) {
from "${debResourcesDir}dirs${path}"
user u
permissionGroup g
dirMode mode
fileMode mode
}
}

if (dist.contains("addons")){
requires('openhab2')
from(gInputFile) {
into 'usr/share/openhab2/addons'
}
} else {
preInstall file(resourcesDir + 'deb/control-runtime/preinst')
postInstall file(resourcesDir + 'deb/control-runtime/postinst')
preUninstall file(resourcesDir + 'deb/control-runtime/prerm')
postUninstall file(resourcesDir + 'deb/control-runtime/postrm')

configurationFile('/etc/default/openhab2')
configurationFile('/usr/lib/systemd/system/openhab2.service')

requires('adduser')

FileTree tar = tarTree(gInputFile)
suckUpEmptyDirectories('/var/log/openhab2', user, permissionGroup, 0755)
suckUpEmptyDirectories('/var/lib/openhab2/persistence/db4o', user, permissionGroup, 0755)
suckUpEmptyDirectories('/var/lib/openhab2/persistence/rrd4j', user, permissionGroup, 0755)
suckUpEmptyDirectories('/var/lib/openhab2/persistence/mapdb', user, permissionGroup, 0755)
suckUpEmptyDirectories('/usr/share/openhab2/bin', user, permissionGroup, 0755)
from(debResourcesDir + 'etc/default/openhab2'){
user 'root'
permissionGroup 'root'
fileMode 0644
into '/etc/default'
}
from(debResourcesDir + 'bin/setpermissions.sh'){
user 'root'
permissionGroup 'root'
fileMode 0775
into '/usr/share/openhab2/bin'
}
from(debResourcesDir + 'systemd/openhab2.service'){
fileMode 0644
user 'root'
permissionGroup 'root'
into '/usr/lib/systemd/system'
packageTypes.each { pType ->
def packageType = Deb
if (pType == 'Rpm') { packageType = Rpm }
task "distro-${pType}-${dist}"(type: packageType, dependsOn: "download-${dist}") {

if (pType == 'Deb') { arch = "${OSPACKAGE_ARCH}" }
release = gRelease
packageName = gPackageName
if (pType == 'Rpm') {
gVersion = gVersion.replaceAll('~','.')
}
from(debResourcesDir + 'etc/init.d/openhab2'){
fileMode 0775
user 'root'
permissionGroup 'root'
into '/etc/init.d/'
}
from(tar){
into '/usr/share/openhab2'
exclude 'conf/**'
exclude 'userdata/**'
exclude 'runtime/bin/oh2_dir_layout'
exclude 'start.bat'
exclude 'start_debug.bat'
}
from(tar){
into '/etc/openhab2'
include 'conf/**'
eachFile { details ->
def pkgPath = details.path - 'conf'
details.path = pkgPath
configurationFile(details.path)
version = gVersion
distribution = gDebDist
packageDescription = gDescription

/**
* Suck up all the empty directories that we need to install into the path.
*/
Closure suckUpEmptyDirectories = { path, u, g, mode ->
into(path) {
from "${debResourcesDir}dirs${path}"
user u
permissionGroup g
dirMode mode
fileMode mode
}
}
from(tar){
into '/var/lib/openhab2'
include 'userdata/**'
exclude 'userdata/etc/startup.properties'
exclude 'userdata/etc/config.properties'
exclude 'userdata/etc/distribution.info'
exclude 'userdata/etc/jre.properties'
exclude 'userdata/etc/org.apache.karaf.*'
exclude 'userdata/etc/profile.cfg'
exclude 'userdata/etc/branding.properties'
exclude 'userdata/etc/branding-ssh.properties'
exclude 'userdata/etc/custom.properties'
exclude 'userdata/etc/version.properties'
eachFile { details ->
def pkgPath = details.path - 'userdata'
details.path = pkgPath
configurationFile(details.path)
}
}
from(tar){
into '/var/lib/openhab2'
include 'userdata/etc/startup.properties'
include 'userdata/etc/config.properties'
include 'userdata/etc/distribution.info'
include 'userdata/etc/jre.properties'
include 'userdata/etc/org.apache.karaf.*'
include 'userdata/etc/profile.cfg'
include 'userdata/etc/branding.properties'
include 'userdata/etc/branding-ssh.properties'
include 'userdata/etc/custom.properties'
include 'userdata/etc/version.properties'
eachFile { details ->
def pkgPath = details.path - 'userdata'
details.path = pkgPath

if (dist.contains('addons')){
requires('openhab2')
from(gInputFile) {
if (pType == 'Rpm') {addParentDirs=false}
into 'usr/share/openhab2/addons'
}
}
} else {
preInstall file(resourcesDir + 'deb/control-runtime/preinst')
postInstall file(resourcesDir + 'deb/control-runtime/postinst')
preUninstall file(resourcesDir + 'deb/control-runtime/prerm')
postUninstall file(resourcesDir + 'deb/control-runtime/postrm')

from(debResourcesDir + 'bin/oh2_dir_layout'){
fileMode 0775
into '/usr/share/openhab2/runtime/bin'
}
}
}
configurationFile('/etc/default/openhab2')
configurationFile('/usr/lib/systemd/system/openhab2.service')

task "upload-${dist}"(type:Exec, dependsOn: "distro-${dist}") {
if (pType == 'Deb') {
requires('adduser')
}

def debArchs = ""
architectures.each {arch -> debArchs = debArchs + "deb.architecture=${arch};"}
FileTree tar = tarTree(gInputFile)
suckUpEmptyDirectories('/var/log/openhab2', user, permissionGroup, 0755)
suckUpEmptyDirectories('/var/lib/openhab2/persistence/db4o', user, permissionGroup, 0755)
suckUpEmptyDirectories('/var/lib/openhab2/persistence/rrd4j', user, permissionGroup, 0755)
suckUpEmptyDirectories('/var/lib/openhab2/persistence/mapdb', user, permissionGroup, 0755)
suckUpEmptyDirectories('/usr/share/openhab2/bin', user, permissionGroup, 0755)
from(debResourcesDir + 'etc/default/openhab2'){
fileType CONFIG | NOREPLACE
user 'root'
permissionGroup 'root'
fileMode 0644
into '/etc/default'
}
from(debResourcesDir + 'bin/setpermissions.sh'){
user 'root'
permissionGroup 'root'
fileMode 0775
into '/usr/share/openhab2/bin'
}
from(debResourcesDir + 'systemd/openhab2.service'){
fileType CONFIG | NOREPLACE
fileMode 0644
user 'root'
permissionGroup 'root'
into '/usr/lib/systemd/system'
}
from(debResourcesDir + 'etc/init.d/openhab2'){
fileMode 0775
user 'root'
permissionGroup 'root'
into '/etc/init.d/'
}
from(tar){
into '/usr/share/openhab2'
exclude 'conf/**'
exclude 'userdata/**'
exclude 'runtime/bin/oh2_dir_layout'
exclude 'start.bat'
exclude 'start_debug.bat'
}
from(tar){
fileType CONFIG | NOREPLACE
into '/etc/openhab2'
include 'conf/**'
eachFile { details ->
def pkgPath = details.path - 'conf'
details.path = pkgPath
configurationFile(details.path)
}
}
from(tar){
fileType CONFIG | NOREPLACE
into '/var/lib/openhab2'
include 'userdata/**'
exclude 'userdata/etc/startup.properties'
exclude 'userdata/etc/config.properties'
exclude 'userdata/etc/distribution.info'
exclude 'userdata/etc/jre.properties'
exclude 'userdata/etc/org.apache.karaf.*'
exclude 'userdata/etc/profile.cfg'
exclude 'userdata/etc/branding.properties'
exclude 'userdata/etc/branding-ssh.properties'
exclude 'userdata/etc/custom.properties'
exclude 'userdata/etc/version.properties'
eachFile { details ->
def pkgPath = details.path - 'userdata'
details.path = pkgPath
configurationFile(details.path)
}
}
from(tar){
into '/var/lib/openhab2'
include 'userdata/etc/startup.properties'
include 'userdata/etc/config.properties'
include 'userdata/etc/distribution.info'
include 'userdata/etc/jre.properties'
include 'userdata/etc/org.apache.karaf.*'
include 'userdata/etc/profile.cfg'
include 'userdata/etc/branding.properties'
include 'userdata/etc/branding-ssh.properties'
include 'userdata/etc/custom.properties'
include 'userdata/etc/version.properties'
eachFile { details ->
def pkgPath = details.path - 'userdata'
details.path = pkgPath
}
}

def fileName = "${gPackageName}_${gVersion}-${gRelease}_${OSPACKAGE_ARCH}.deb"
def curlURL = "https://openhab.jfrog.io/${ARTIFACTORY_ORG}/${ARTIFACTORY_REPO}/pool/main/${gVersion}/${fileName};deb.distribution=${gDebDist};deb.component=main;${debArchs};artifactory.licenses=Eclipse-1.0"
from(debResourcesDir + 'bin/oh2_dir_layout'){
fileMode 0775
into '/usr/share/openhab2/runtime/bin'
}
}
}

executable "curl"
args "-X", "PUT", "${curlURL}", "-H", "X-JFrog-Art-Api: ${ARTIFACTORY_KEY}", "-H", "X-GPG-PASSPHRASE: ${ARTIFACTORY_GPG}", "-T", "build/distributions/${fileName}"
standardOutput = new ByteArrayOutputStream()
doLast {
println standardOutput.toString()
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText(standardOutput.toString())
def success = object.uri != null ? object.uri == "https://openhab.jfrog.io/${ARTIFACTORY_ORG}/${ARTIFACTORY_REPO}/pool/main/${gVersion}/${fileName}" : false
if (! success){
throw new GradleException("upload failed: " + object.message)
task "upload-${pType}-${dist}"(type:Exec, dependsOn: "distro-${pType}-${dist}") {

def debArchs = ''
def curlURL = ''
def fileName = ''
def curlOptions = ''

if (pType == 'Deb') {
architectures.each {arch -> debArchs = debArchs + "deb.architecture=${arch};"}
fileName = "${gPackageName}_${gVersion}-${gRelease}_${OSPACKAGE_ARCH}.deb"
curlURL = "https://openhab.jfrog.io/${ARTIFACTORY_ORG}/${ARTIFACTORY_REPO}/pool/main/${gVersion}/${fileName}"
curlOptions = "deb.distribution=${gDebDist};deb.component=main;${debArchs};artifactory.licenses=Eclipse-1.0"
} else if (pType == 'Rpm') {
fileName = "${gPackageName}-${gVersion}-${gRelease}.noarch.rpm"
curlURL = "https://openhab.jfrog.io/${ARTIFACTORY_ORG}/${ARTIFACTORY_REPO}-rpm/${gDebDist}/${gVersion}/${fileName}"
curlOptions = "artifactory.licenses=Eclipse-1.0"
}
executable "curl"
args "-X", "PUT", "${curlURL};${curlOptions}", "-H", "X-JFrog-Art-Api: ${ARTIFACTORY_KEY}", "-H", "X-GPG-PASSPHRASE: ${ARTIFACTORY_GPG}", "-T", "build/distributions/${fileName}"
standardOutput = new ByteArrayOutputStream()
doLast {
println standardOutput.toString()
def jsonSlurper = new JsonSlurper()
def object = jsonSlurper.parseText(standardOutput.toString())
def success = object.uri != null ? object.uri == "${curlURL}" : false
if (! success){
throw new GradleException("upload failed: " + object.message)
}
}
}
}
Expand Down
14 changes: 12 additions & 2 deletions resources/deb/control-runtime/postinst
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
#!/bin/sh
#
# Executed after the installation of the new package
#
# On .deb based systems:
# $1=configure : On installation or upgrade
# $2=* : On upgrade, unset otherwise
#
# On .rpm based systems:
# $1=1 : On installation
# $1=2 : On upgrade

UD_TMP=/var/lib/openhab2/tmp

Expand Down Expand Up @@ -56,8 +66,8 @@ waitForStopFinished(){
}

case "$1" in
configure)
if [ -z $2 ] ; then
configure|1|2)
if [ -z $2 ] && [ $1 -ne 2 ] ; then
# this is a fresh installation
if [ -x /bin/systemctl ] ; then
echo "### NOT starting on installation, please execute the following statements to configure openHAB to start automatically using systemd"
Expand Down
Loading

0 comments on commit be9ca42

Please sign in to comment.