You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by wf...@apache.org on 2015/08/04 23:44:14 UTC

[08/11] aurora-packaging git commit: Adds RPM specfile and support scripting

Adds RPM specfile and support scripting

Bugs closed: AURORA-1116

Reviewed at https://reviews.apache.org/r/33778/


Project: http://git-wip-us.apache.org/repos/asf/aurora-packaging/repo
Commit: http://git-wip-us.apache.org/repos/asf/aurora-packaging/commit/df6325c8
Tree: http://git-wip-us.apache.org/repos/asf/aurora-packaging/tree/df6325c8
Diff: http://git-wip-us.apache.org/repos/asf/aurora-packaging/diff/df6325c8

Branch: refs/heads/master
Commit: df6325c872c5c6a7b1a01adcad98a940730bcf5e
Parents: 6bd5279
Author: Steve Salevan <st...@gmail.com>
Authored: Mon Jul 6 14:57:34 2015 -0700
Committer: Bill Farner <wf...@twitter.com>
Committed: Tue Aug 4 14:07:42 2015 -0700

----------------------------------------------------------------------
 build-support/packaging/rpm/Makefile            | 101 ++++++
 build-support/packaging/rpm/README.md           |  42 +++
 build-support/packaging/rpm/aurora.init.sh      | 199 +++++++++++
 build-support/packaging/rpm/aurora.logrotate    |  24 ++
 build-support/packaging/rpm/aurora.service      |  27 ++
 build-support/packaging/rpm/aurora.spec         | 344 +++++++++++++++++++
 build-support/packaging/rpm/aurora.startup.sh   |  27 ++
 build-support/packaging/rpm/aurora.sysconfig    |  79 +++++
 build-support/packaging/rpm/clusters.json       |   6 +
 .../packaging/rpm/thermos-observer.init.sh      | 197 +++++++++++
 .../packaging/rpm/thermos-observer.logrotate    |  24 ++
 .../packaging/rpm/thermos-observer.service      |  27 ++
 .../packaging/rpm/thermos-observer.startup.sh   |  19 +
 .../packaging/rpm/thermos-observer.sysconfig    |  22 ++
 14 files changed, 1138 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/Makefile
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/Makefile b/build-support/packaging/rpm/Makefile
new file mode 100644
index 0000000..1833a25
--- /dev/null
+++ b/build-support/packaging/rpm/Makefile
@@ -0,0 +1,101 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+GIT_COMMIT ?= HEAD
+
+USING_GIT ?= $(shell git status >/dev/null 2>&1 && echo 'true' || echo 'false')
+ifeq ($(USING_GIT),true)
+	VERSION_SUFFIX := .$(shell git rev-parse --short $(GIT_COMMIT))
+else
+	VERSION_SUFFIX :=
+endif
+
+CURRENT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
+
+TOPDIR ?= $(CURRENT_DIR)/../../..
+DIST_DIR ?= $(TOPDIR)/dist
+RPM_TOPDIR ?= $(DIST_DIR)
+
+DATETIME ?= $(shell date +%Y%m%d%H%M)
+
+SOURCE_TARGET ?= $(RPM_TOPDIR)/rpmbuild/SOURCES/aurora.tar.gz
+
+AURORA_VERSION ?= $(shell cat $(TOPDIR)/.auroraversion | tr '-' '.')
+MESOS_VERSION ?= $(shell sed -n 's/.*mesos\.native==\(.*\)/\1/p' $(TOPDIR)/3rdparty/python/requirements.txt)
+
+
+PHONY: all nightly_version release_version get_source_target clean mkdir srpm nightly_srpm nightly_rpm release_srpm release_rpm tar_source
+
+all: release_rpm
+
+nightly_version:
+	$(eval AURORA_VERSION := $(AURORA_VERSION).$(DATETIME)$(VERSION_SUFFIX))
+
+release_version:
+	$(eval AURORA_VERSION := $(AURORA_VERSION))
+
+clean:
+	rm -rf $(RPM_TOPDIR)/rpmbuild
+
+mkdir: clean
+	mkdir -p $(RPM_TOPDIR)/rpmbuild/BUILD
+	mkdir -p $(RPM_TOPDIR)/rpmbuild/BUILDROOT
+	mkdir -p $(RPM_TOPDIR)/rpmbuild/RPMS
+	mkdir -p $(RPM_TOPDIR)/rpmbuild/SOURCES
+	mkdir -p $(RPM_TOPDIR)/rpmbuild/SRPMS
+
+tar_source: mkdir
+	if [[ "$(USING_GIT)" == 'true' ]]; then \
+		cd `git rev-parse --show-toplevel` && git archive --format=tar --prefix=aurora/ $(GIT_COMMIT) | gzip > $(SOURCE_TARGET); \
+	else \
+		tmp_dir=`mktemp -d '/tmp/aurorabuild.XXXXXX'`; \
+		mkdir $${tmp_dir}/aurora; \
+		cp -r $(TOPDIR)/* $${tmp_dir}/aurora; \
+		cd $${tmp_dir}; \
+		tar cvzf $(SOURCE_TARGET) aurora; \
+		rm -rf $${tmp_dir}; \
+	fi
+
+srpm: tar_source
+	rpmbuild $(RPM_OPTS) \
+		--define "_topdir $(RPM_TOPDIR)" \
+		--define "_builddir %{_topdir}/rpmbuild/BUILD" \
+		--define "_buildrootdir %{_topdir}/rpmbuild/BUILDROOT" \
+		--define "_rpmdir %{_topdir}/rpmbuild/RPMS" \
+		--define "_srcrpmdir %{_topdir}/rpmbuild/SRPMS" \
+		--define "_specdir %(pwd)" \
+		--define "_sourcedir  %{_topdir}/rpmbuild/SOURCES" \
+		--define "AURORA_VERSION $(AURORA_VERSION)" \
+		--define "MESOS_VERSION $(MESOS_VERSION)" \
+		--nodeps -bs aurora.spec
+
+rpm: tar_source
+	rpmbuild $(RPM_OPTS) \
+		--define "_topdir $(RPM_TOPDIR)" \
+		--define "_builddir %{_topdir}/rpmbuild/BUILD" \
+		--define "_buildrootdir %{_topdir}/rpmbuild/BUILDROOT" \
+		--define "_rpmdir %{_topdir}/rpmbuild/RPMS" \
+		--define "_srcrpmdir %{_topdir}/rpmbuild/SRPMS" \
+		--define "_specdir %(pwd)" \
+		--define "_sourcedir  %{_topdir}/rpmbuild/SOURCES" \
+		--define "AURORA_VERSION $(AURORA_VERSION)" \
+		--define "MESOS_VERSION $(MESOS_VERSION)" \
+		-ba aurora.spec
+
+nightly_srpm: nightly_version srpm
+
+nightly_rpm: nightly_version rpm
+
+release_srpm: release_version srpm
+
+release_rpm: release_version rpm

http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/README.md
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/README.md b/build-support/packaging/rpm/README.md
new file mode 100644
index 0000000..c5916e0
--- /dev/null
+++ b/build-support/packaging/rpm/README.md
@@ -0,0 +1,42 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+This directory contains all necessary scripting to support the building of Aurora
+nightly and release RPMs.  Building and deployment have been tested against the following
+Red Hat flavors:
+
+ * CentOS 6/7 on x86_64
+ * Fedora 19/20 on x86_64
+
+How to build using Make and rpmbuild
+====================================
+
+1. Install the necessary build dependencies via yum-builddep:
+
+```bash
+cd build-support/packaging/rpm
+sudo yum install -y make rpm-build yum-utils
+make srpm
+sudo yum-builddep ../../../dist/rpmbuild/SRPMS/*
+```
+
+2. Build the RPM via Make.
+
+```bash
+make rpm
+```
+
+3. After the RPM building process has concluded, RPMs will land here:
+
+```
+$AURORA_HOME/dist/rpmbuild/RPMS
+```

http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/aurora.init.sh
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/aurora.init.sh b/build-support/packaging/rpm/aurora.init.sh
new file mode 100644
index 0000000..ac4c438
--- /dev/null
+++ b/build-support/packaging/rpm/aurora.init.sh
@@ -0,0 +1,199 @@
+#!/bin/bash
+#
+# aurora Starts the Aurora task scheduler for Mesos.
+#
+# chkconfig:   345 55 25
+# description: This script starts the Aurora service scheduler for Apache Mesos, \
+#              used for scheduling and executing long-running tasks and \
+#              cron jobs.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+### BEGIN INIT INFO
+# Provides: aurora
+# Required-Start:
+# Required-Stop:
+# Should-Start:
+# Should-Stop:
+# Default-Start: 3 4 5
+# Default-Stop: 0 1 2 6
+# Short-Description: Starts the Aurora task scheduler for Mesos.
+# Description: Starts the Aurora task scheduler for Mesos.
+### END INIT INFO
+
+# Source LSB function library.
+. /lib/lsb/init-functions
+
+aurora_user="aurora"
+exec="/usr/bin/aurora-scheduler-startup"
+prog="aurora"
+logdir="/var/log/aurora"
+lockfile="/var/run/aurora.lock"
+pid_file="/var/run/aurora.pid"
+stderr_log="${logdir}/aurora.log"
+
+# Get a sane screen width
+[ -z "${COLUMNS:-}" ] && COLUMNS=80
+[ -z "${CONSOLETYPE:-}" ] && CONSOLETYPE="$(/sbin/consoletype)"
+
+# Read in init configuration.
+if [ -z "${BOOTUP:-}" ]; then
+  if [ -f /etc/sysconfig/init ]; then
+    . /etc/sysconfig/init
+  else
+    BOOTUP=color
+    RES_COL=60
+    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
+    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
+    SETCOLOR_FAILURE="echo -en \\033[1;31m"
+    SETCOLOR_WARNING="echo -en \\033[1;33m"
+    SETCOLOR_NORMAL="echo -en \\033[0;39m"
+    LOGLEVEL=1
+  fi
+  if [ "$CONSOLETYPE" = "serial" ]; then
+    BOOTUP=serial
+    MOVE_TO_COL=
+    SETCOLOR_SUCCESS=
+    SETCOLOR_FAILURE=
+    SETCOLOR_WARNING=
+    SETCOLOR_NORMAL=
+  fi
+fi
+
+function usage {
+  err "Starts the Aurora task scheduler for Mesos."
+  err "Usage: ${0} (restart|start|stop|status)"
+}
+
+function out {
+  printf '%s\n' "$*";
+}
+
+function msg {
+  out "$*" >&2;
+}
+
+function err {
+  local x=${?};
+  msg "$*";
+  return $(( ${x} == 0 ? 1 : ${x} ));
+}
+
+function echo_success {
+  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+  echo -n "["
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
+  echo -n $"  OK  "
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+  echo -n "]"
+  echo -ne "\r"
+  return 0
+}
+
+function echo_failure {
+  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+  echo -n "["
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
+  echo -n $"FAILED"
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+  echo -n "]"
+  echo -ne "\r"
+  return 1
+}
+
+# Parse arguments.
+ACTION=${1}
+
+# Ensures that action is.
+if [ -z ${ACTION} ]; then
+  err "ERROR: No action specified."
+  usage
+  exit -1
+fi
+
+start() {
+  [ -x ${exec} ] || exit 5
+  [ -f ${config} ] || exit 6
+  echo -n $"Starting $prog: "
+  start_daemon daemonize -u ${aurora_user} -e ${stderr_log} -p ${pid_file} ${exec}
+  retval=$?
+  [ $retval -eq 0 ] && (echo_success; touch $lockfile) || echo_failure
+  echo
+  return $retval
+}
+
+stop() {
+  echo -n $"Stopping $prog: "
+  killproc -p ${pid_file} ${exec}
+  retval=$?
+  [ $retval -eq 0 ] && (echo_success; rm -f $lockfile) || echo_failure
+  echo
+  return $retval
+}
+
+restart() {
+  stop
+  start
+}
+
+reload() {
+  restart
+}
+
+force_reload() {
+  restart
+}
+
+rh_status() {
+  pid=$(pidofproc -p ${pid_file} ${prog})
+  if [ $? -eq 0 ]; then
+    echo "${prog} (pid ${pid}) is running..."
+    return 0
+  else
+    if [ -e $lockfile ]; then
+      echo "${prog} dead but lockfile exists"
+      return 2
+    else
+      echo "${prog} is stopped"
+      return 1
+    fi
+  fi
+}
+
+rh_status_q() {
+  rh_status >/dev/null 2>&1
+}
+
+# Executes the requested daemon action.
+case "${ACTION}" in
+  start)
+    rh_status_q && rh_status && exit 0
+    start
+    ;;
+  stop)
+    stop
+    ;;
+  status)
+    rh_status
+    ;;
+  restart)
+    restart
+    ;;
+  *)
+    err "ERROR: Invalid action specified."
+    usage
+    exit -3
+esac
+
+exit $?

http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/aurora.logrotate
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/aurora.logrotate b/build-support/packaging/rpm/aurora.logrotate
new file mode 100644
index 0000000..1c43073
--- /dev/null
+++ b/build-support/packaging/rpm/aurora.logrotate
@@ -0,0 +1,24 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+/var/log/aurora/*.log {
+
+  daily
+  missingok
+  rotate 14
+  compress
+  delaycompress
+  notifempty
+  copytruncate
+
+}

http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/aurora.service
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/aurora.service b/build-support/packaging/rpm/aurora.service
new file mode 100644
index 0000000..b81cb63
--- /dev/null
+++ b/build-support/packaging/rpm/aurora.service
@@ -0,0 +1,27 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+[Unit]
+Description=Aurora Scheduler
+After=network.target
+Wants=network.target
+
+[Service]
+ExecStart=/usr/bin/aurora-scheduler-startup
+User=aurora
+Group=aurora
+Restart=always
+RestartSec=20
+LimitNOFILE=16384
+
+[Install]
+WantedBy=multi-user.target

http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/aurora.spec
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/aurora.spec b/build-support/packaging/rpm/aurora.spec
new file mode 100644
index 0000000..d5d5c9f
--- /dev/null
+++ b/build-support/packaging/rpm/aurora.spec
@@ -0,0 +1,344 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Overridable variables;
+%if %{?!AURORA_VERSION:1}0
+%global AURORA_VERSION 0.9.0
+%endif
+
+%if %{?!AURORA_USER:1}0
+%global AURORA_USER aurora
+%endif
+
+%if %{?!AURORA_GROUP:1}0
+%global AURORA_GROUP aurora
+%endif
+
+%if %{?!GRADLE_BASEURL:1}0
+%global GRADLE_BASEURL https://services.gradle.org/distributions
+%endif
+
+%if %{?!GRADLE_VERSION:1}0
+%global GRADLE_VERSION 2.4
+%endif
+
+%if %{?!JAVA_VERSION:!}0
+%global JAVA_VERSION 1.8.0
+%endif
+
+%if %{?!MESOS_BASEURL:1}0
+%global MESOS_BASEURL https://archive.apache.org/dist/mesos
+%endif
+
+%if %{?!MESOS_VERSION:1}0
+%global MESOS_VERSION 0.22.0
+%endif
+
+%if %{?!PEX_BINARIES:1}0
+%global PEX_BINARIES aurora aurora_admin thermos thermos_executor thermos_runner thermos_observer
+%endif
+
+%if %{?!PYTHON_VERSION:1}0
+%global PYTHON_VERSION 2.7
+%endif
+
+
+Name:          aurora
+Version:       %{AURORA_VERSION}
+Release:       1%{?dist}.aurora
+Summary:       A Mesos framework for scheduling and executing long-running services and cron jobs.
+Group:         Applications/System
+License:       ASL 2.0
+URL:           https://%{name}.apache.org/
+
+Source0:       https://github.com/apache/%{name}/archive/%{version}/%{name}.tar.gz
+
+BuildRequires: apr-devel
+BuildRequires: cyrus-sasl-devel
+BuildRequires: gcc
+BuildRequires: gcc-c++
+BuildRequires: git
+BuildRequires: java-%{JAVA_VERSION}-openjdk-devel
+BuildRequires: libcurl-devel
+BuildRequires: patch
+%if 0%{?rhel} && 0%{?rhel} < 7
+BuildRequires: python27
+BuildRequires: python27-scldevel
+%else
+BuildRequires: python
+BuildRequires: python-devel
+%endif
+BuildRequires: subversion-devel
+BuildRequires: tar
+BuildRequires: unzip
+BuildRequires: wget
+BuildRequires: zlib-devel
+
+Requires:      daemonize
+Requires:      java-%{JAVA_VERSION}-openjdk
+Requires:      mesos = %{MESOS_VERSION}
+
+
+%description
+Apache Aurora is a service scheduler that runs on top of Mesos, enabling you to schedule
+long-running services that take advantage of Mesos' scalability, fault-tolerance, and
+resource isolation.
+
+
+%package client
+Summary: A client for scheduling services against the Aurora scheduler
+Group: Development/Tools
+
+%if 0%{?rhel} && 0%{?rhel} < 7
+Requires: python27
+%else
+Requires: python
+%endif
+
+%description client
+A set of command-line applications used for interacting with and administering Aurora
+schedulers.
+
+
+%package thermos
+Summary: Mesos executor that runs and monitors tasks scheduled by the Aurora scheduler
+Group: Applications/System
+
+Requires: cyrus-sasl
+Requires: daemonize
+%if 0%{?rhel} && 0%{?rhel} < 7
+Requires: docker-io
+%else
+Requires: docker
+%endif
+Requires: mesos = %{MESOS_VERSION}
+%if 0%{?rhel} && 0%{?rhel} < 7
+Requires: python27
+%else
+Requires: python
+%endif
+
+%description thermos
+Thermos a simple process management framework used for orchestrating dependent processes
+within a single Mesos chroot.  It works in tandem with Aurora to ensure that tasks
+scheduled by it are properly executed on Mesos slaves and provides a Web UI to monitor the
+state of all running tasks.
+
+
+%prep
+%setup -n %{name}
+
+
+%build
+# Preferences SCL-installed Python 2.7 if we're building on EL6.
+%if 0%{?rhel} && 0%{?rhel} < 7
+export PATH=/opt/rh/python27/root/usr/bin${PATH:+:${PATH}}
+export LD_LIBRARY_PATH=/opt/rh/python27/root/usr/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
+export MANPATH=/opt/rh/python27/root/usr/share/man:${MANPATH}
+# For systemtap
+export XDG_DATA_DIRS=/opt/rh/python27/root/usr/share${XDG_DATA_DIRS:+:${XDG_DATA_DIRS}}
+# For pkg-config
+export PKG_CONFIG_PATH=/opt/rh/python27/root/usr/lib64/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}
+%endif
+
+# Preferences Java 1.8 over any other Java version.
+export PATH=/usr/lib/jvm/java-1.8.0/bin:${PATH}
+
+# Downloads Gradle executable.
+wget %{GRADLE_BASEURL}/gradle-%{GRADLE_VERSION}-bin.zip
+unzip gradle-%{GRADLE_VERSION}-bin.zip
+
+# Creates Pants directory where we'll store our native Mesos Python eggs.
+mkdir -p .pants.d/python/eggs/
+
+# Builds mesos-native and mesos-interface eggs if not currently packaged.
+wget "%{MESOS_BASEURL}/%{MESOS_VERSION}/mesos-%{MESOS_VERSION}.tar.gz"
+tar xvzf mesos-%{MESOS_VERSION}.tar.gz
+pushd mesos-%{MESOS_VERSION}
+./configure --disable-java
+make
+find . -name '*.egg' -exec cp -v {} ../.pants.d/python/eggs/ \;
+popd
+
+# Builds the Aurora scheduler.
+./gradle-%{GRADLE_VERSION}/bin/gradle installDist
+
+# Builds Aurora client PEX binaries.
+./pants binary src/main/python/apache/aurora/admin:aurora_admin
+./pants binary src/main/python/apache/aurora/client/cli:aurora
+
+# Builds Aurora Thermos and GC executor PEX binaries.
+./pants binary src/main/python/apache/aurora/executor/bin:thermos_executor
+./pants binary src/main/python/apache/thermos/cli/bin:thermos
+./pants binary src/main/python/apache/thermos/bin:thermos_ckpt
+./pants binary src/main/python/apache/thermos/bin:thermos_runner
+./pants binary src/main/python/apache/thermos/observer/bin:thermos_observer
+
+# Packages the Thermos runner within the Thermos executor.
+python <<EOF
+import contextlib
+import zipfile
+with contextlib.closing(zipfile.ZipFile('dist/thermos_executor.pex', 'a')) as zf:
+  zf.writestr('apache/aurora/executor/resources/__init__.py', '')
+  zf.write('dist/thermos_runner.pex', 'apache/aurora/executor/resources/thermos_runner.pex')
+EOF
+
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+# Builds installation directory structure.
+mkdir -p %{buildroot}%{_bindir}
+mkdir -p %{buildroot}%{_docdir}/%{name}-%{version}
+mkdir -p %{buildroot}%{_prefix}/lib/%{name}
+mkdir -p %{buildroot}%{_sharedstatedir}
+mkdir -p %{buildroot}%{_localstatedir}/lib/%{name}
+mkdir -p %{buildroot}%{_localstatedir}/log/%{name}
+mkdir -p %{buildroot}%{_localstatedir}/log/thermos
+mkdir -p %{buildroot}%{_localstatedir}/run/thermos
+mkdir -p %{buildroot}%{_sysconfdir}/%{name}
+mkdir -p %{buildroot}%{_sysconfdir}/init.d
+mkdir -p %{buildroot}%{_sysconfdir}/systemd/system
+mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d
+mkdir -p %{buildroot}%{_sysconfdir}/sysconfig
+
+# Installs the Aurora scheduler that was just built into /usr/lib/aurora.
+cp -r dist/install/aurora-scheduler/* %{buildroot}%{_prefix}/lib/%{name}
+
+# Installs all PEX binaries.
+for pex_binary in %{PEX_BINARIES}; do
+  install -m 755 dist/${pex_binary}.pex %{buildroot}%{_bindir}/${pex_binary}
+done
+
+# Installs all support scripting.
+%if 0%{?fedora} || 0%{?rhel} > 6
+install -m 644 build-support/packaging/rpm/%{name}.service %{buildroot}%{_sysconfdir}/systemd/system/%{name}.service
+install -m 644 build-support/packaging/rpm/thermos-observer.service %{buildroot}%{_sysconfdir}/systemd/system/thermos-observer.service
+%else
+install -m 755 build-support/packaging/rpm/%{name}.init.sh %{buildroot}%{_sysconfdir}/init.d/%{name}
+install -m 755 build-support/packaging/rpm/thermos-observer.init.sh %{buildroot}%{_sysconfdir}/init.d/thermos-observer
+%endif
+
+install -m 755 build-support/packaging/rpm/%{name}.startup.sh %{buildroot}%{_bindir}/%{name}-scheduler-startup
+install -m 755 build-support/packaging/rpm/thermos-observer.startup.sh %{buildroot}%{_bindir}/thermos-observer-startup
+
+install -m 644 build-support/packaging/rpm/%{name}.sysconfig %{buildroot}%{_sysconfdir}/sysconfig/%{name}
+install -m 644 build-support/packaging/rpm/thermos-observer.sysconfig %{buildroot}%{_sysconfdir}/sysconfig/thermos-observer
+
+install -m 644 build-support/packaging/rpm/%{name}.logrotate %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
+install -m 644 build-support/packaging/rpm/thermos-observer.logrotate %{buildroot}%{_sysconfdir}/logrotate.d/thermos-observer
+
+install -m 644 build-support/packaging/rpm/clusters.json %{buildroot}%{_sysconfdir}/%{name}/clusters.json
+
+
+%pre
+getent group %{AURORA_GROUP} > /dev/null || groupadd -r %{AURORA_GROUP}
+getent passwd %{AURORA_USER} > /dev/null || \
+    useradd -r -d %{_localstatedir}/lib/%{name} -g %{AURORA_GROUP} \
+    -s /bin/bash -c "Aurora Scheduler" %{AURORA_USER}
+exit 0
+
+# Pre/post installation scripts:
+%post
+%if 0%{?fedora} || 0%{?rhel} > 6
+%systemd_post %{name}.service
+%else
+/sbin/chkconfig --add %{name}
+%endif
+
+%preun
+%if 0%{?fedora} || 0%{?rhel} > 6
+%systemd_preun %{name}.service
+%else
+/sbin/service %{name} stop >/dev/null 2>&1
+/sbin/chkconfig --del %{name}
+%endif
+
+%postun
+%if 0%{?fedora} || 0%{?rhel} > 6
+%systemd_postun_with_restart %{name}.service
+%else
+/sbin/service %{name} start >/dev/null 2>&1
+%endif
+
+
+%post thermos
+%if 0%{?fedora} || 0%{?rhel} > 6
+%systemd_post thermos-observer.service
+%else
+/sbin/chkconfig --add thermos-observer
+%endif
+
+%preun thermos
+%if 0%{?fedora} || 0%{?rhel} > 6
+%systemd_preun thermos-observer.service
+%else
+/sbin/service thermos-observer stop >/dev/null 2>&1
+/sbin/chkconfig --del thermos-observer
+%endif
+
+%postun thermos
+%if 0%{?fedora} || 0%{?rhel} > 6
+%systemd_postun_with_restart thermos-observer.service
+%else
+/sbin/service thermos-observer start >/dev/null 2>&1
+%endif
+
+
+%files
+%defattr(-,root,root,-)
+%doc docs/*.md
+%{_bindir}/aurora-scheduler-startup
+%attr(-,%{AURORA_USER},%{AURORA_GROUP}) %{_localstatedir}/lib/%{name}
+%attr(-,%{AURORA_USER},%{AURORA_GROUP}) %{_localstatedir}/log/%{name}
+%{_prefix}/lib/%{name}/bin/*
+%{_prefix}/lib/%{name}/etc/*
+%{_prefix}/lib/%{name}/lib/*
+%if 0%{?fedora} || 0%{?rhel} > 6
+%{_sysconfdir}/systemd/system/%{name}.service
+%else
+%{_sysconfdir}/init.d/%{name}
+%endif
+%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
+%config(noreplace) %{_sysconfdir}/sysconfig/%{name}
+
+
+%files client
+%defattr(-,root,root,-)
+%{_bindir}/%{name}
+%{_bindir}/%{name}_admin
+%config(noreplace) %{_sysconfdir}/%{name}/clusters.json
+
+
+%files thermos
+%defattr(-,root,root,-)
+%{_bindir}/thermos
+%{_bindir}/thermos_executor
+%{_bindir}/thermos_observer
+%{_bindir}/thermos_runner
+%{_bindir}/thermos-observer-startup
+%{_localstatedir}/log/thermos
+%{_localstatedir}/run/thermos
+%if 0%{?fedora} || 0%{?rhel} > 6
+%{_sysconfdir}/systemd/system/thermos-observer.service
+%else
+%{_sysconfdir}/init.d/thermos-observer
+%endif
+%config(noreplace) %{_sysconfdir}/logrotate.d/thermos-observer
+%config(noreplace) %{_sysconfdir}/sysconfig/thermos-observer
+
+
+%changelog
+* Tue Apr 14 2015 Steve Salevan <st...@gmail.com>
+- Initial specfile writeup.

http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/aurora.startup.sh
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/aurora.startup.sh b/build-support/packaging/rpm/aurora.startup.sh
new file mode 100644
index 0000000..3c444d9
--- /dev/null
+++ b/build-support/packaging/rpm/aurora.startup.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+#
+# Starts up an Aurora scheduler process.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+source /etc/sysconfig/aurora
+
+# Environment variables control the behavior of the Mesos scheduler driver (libmesos).
+export GLOG_v LIBPROCESS_PORT LIBPROCESS_IP
+export JAVA_OPTS="${JAVA_OPTS[*]}"
+
+# Preferences Java 1.8 over any other Java version.
+export PATH=/usr/lib/jvm/java-1.8.0/bin:${PATH}
+
+exec /usr/lib/aurora/bin/aurora-scheduler "${AURORA_FLAGS[@]}"

http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/aurora.sysconfig
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/aurora.sysconfig b/build-support/packaging/rpm/aurora.sysconfig
new file mode 100644
index 0000000..b2a974f
--- /dev/null
+++ b/build-support/packaging/rpm/aurora.sysconfig
@@ -0,0 +1,79 @@
+#!/bin/bash
+# Configuration used when executing the Aurora task scheduler process.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+GLOG_v=0
+
+LIBPROCESS_PORT=8083
+LIBPROCESS_IP='127.0.0.1'
+
+# Flags that control the behavior of the JVM.
+JAVA_OPTS=(
+  # Uses server-level GC optimizations, as this is a server.
+  -server
+
+  # Location of libmesos-XXXX.so / libmesos-XXXX.dylib
+  -Djava.library.path='/usr/lib;/usr/lib64'
+)
+
+# Flags control the behavior of the Aurora scheduler.
+# For a full list of available flags, run /usr/lib/aurora/bin/aurora-scheduler -help
+AURORA_FLAGS=(
+  # The name of this cluster.
+  -cluster_name='main'
+
+  # The HTTP port upon which Aurora will listen.
+  -http_port=8081
+
+  # The ZooKeeper URL of the ZNode where the Mesos master has registered.
+  -mesos_master_address='zk://127.0.0.1:2181/mesos/master'
+
+  # The ZooKeeper quorum to which Aurora will register itself.
+  -zk_endpoints='127.0.0.1:2181'
+
+  # The ZooKeeper ZNode within the specified quorum to which Aurora will register its
+  # ServerSet, which keeps track of all live Aurora schedulers.
+  -serverset_path='/aurora/scheduler'
+
+  # The log level of the built-in logger.
+  -vlog='INFO'
+
+  # Allows the scheduling of containers of the provided type.
+  -allowed_container_types='DOCKER,MESOS'
+
+  ### Native Log Settings ###
+
+  # The native log serves as a replicated database which stores the state of the
+  # scheduler, allowing for multi-master operation.
+
+  # Size of the quorum of Aurora schedulers which possess a native log.  If running in
+  # multi-master mode, consult the following document to determine appropriate values:
+  #
+  # https://aurora.apache.org/documentation/latest/deploying-aurora-scheduler/#replicated-log-configuration
+  -native_log_quorum_size='1'
+  # The ZooKeeper ZNode to which Aurora will register the locations of its replicated log.
+  -native_log_zk_group_path='/aurora/native-log'
+  # The local directory in which an Aurora scheduler can find Aurora's replicated log.
+  -native_log_file_path='/var/lib/aurora/db'
+  # The local directory in which Aurora schedulers will place state backups.
+  -backup_dir='/var/lib/aurora/backups'
+
+  ### Thermos Settings ###
+
+  # The local path of the Thermos executor binary.
+  -thermos_executor_path='/usr/bin/thermos_executor'
+  # Flags to pass to the Thermos executor.
+  -thermos_executor_flags='--announcer-enable --announcer-ensemble 127.0.0.1:2181'
+)

http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/clusters.json
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/clusters.json b/build-support/packaging/rpm/clusters.json
new file mode 100644
index 0000000..133013b
--- /dev/null
+++ b/build-support/packaging/rpm/clusters.json
@@ -0,0 +1,6 @@
+[{
+  "name": "main",
+  "zk": "127.0.0.1",
+  "scheduler_zk_path": "/aurora/scheduler",
+  "auth_mechanism": "UNAUTHENTICATED"
+}]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/thermos-observer.init.sh
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/thermos-observer.init.sh b/build-support/packaging/rpm/thermos-observer.init.sh
new file mode 100644
index 0000000..65a2452
--- /dev/null
+++ b/build-support/packaging/rpm/thermos-observer.init.sh
@@ -0,0 +1,197 @@
+#!/bin/bash
+#
+# thermos-observer Starts the Thermos task observer.
+#
+# chkconfig:   345 55 25
+# description: This script starts the Thermos task observer, which provides a WebUI for \
+#              viewing the state of tasks launched by the Thermos executor.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+### BEGIN INIT INFO
+# Provides: thermos-observer
+# Required-Start:
+# Required-Stop:
+# Should-Start:
+# Should-Stop:
+# Default-Start: 3 4 5
+# Default-Stop: 0 1 2 6
+# Short-Description: Starts the Thermos task observer.
+# Description: Starts the Thermos task observer.
+### END INIT INFO
+
+# Source LSB function library.
+. /lib/lsb/init-functions
+
+exec="/usr/bin/thermos-observer-startup"
+prog="thermos-observer"
+logdir="/var/log/thermos"
+lockfile="/var/run/thermos-observer.lock"
+pid_file="/var/run/thermos-observer.pid"
+
+stderr_log="${logdir}/observer.log"
+
+# Get a sane screen width
+[ -z "${COLUMNS:-}" ] && COLUMNS=80
+[ -z "${CONSOLETYPE:-}" ] && CONSOLETYPE="$(/sbin/consoletype)"
+
+# Read in init configuration.
+if [ -z "${BOOTUP:-}" ]; then
+  if [ -f /etc/sysconfig/init ]; then
+    . /etc/sysconfig/init
+  else
+    BOOTUP=color
+    RES_COL=60
+    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
+    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
+    SETCOLOR_FAILURE="echo -en \\033[1;31m"
+    SETCOLOR_WARNING="echo -en \\033[1;33m"
+    SETCOLOR_NORMAL="echo -en \\033[0;39m"
+    LOGLEVEL=1
+  fi
+  if [ "$CONSOLETYPE" = "serial" ]; then
+    BOOTUP=serial
+    MOVE_TO_COL=
+    SETCOLOR_SUCCESS=
+    SETCOLOR_FAILURE=
+    SETCOLOR_WARNING=
+    SETCOLOR_NORMAL=
+  fi
+fi
+
+function usage {
+  err "Starts the Thermos task observer."
+  err "Usage: ${0} (restart|start|stop|status)"
+}
+
+function out {
+  printf '%s\n' "$*";
+}
+
+function msg {
+  out "$*" >&2;
+}
+
+function err {
+  local x=${?};
+  msg "$*";
+  return $(( ${x} == 0 ? 1 : ${x} ));
+}
+
+function echo_success {
+  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+  echo -n "["
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
+  echo -n $"  OK  "
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+  echo -n "]"
+  echo -ne "\r"
+  return 0
+}
+
+function echo_failure {
+  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+  echo -n "["
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
+  echo -n $"FAILED"
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+  echo -n "]"
+  echo -ne "\r"
+  return 1
+}
+
+# Parse arguments.
+ACTION=${1}
+
+# Ensures that action is.
+if [ -z ${ACTION} ]; then
+  err "ERROR: No action specified."
+  usage
+  exit -1
+fi
+
+start() {
+  [ -x ${exec} ] || exit 5
+  [ -f ${config} ] || exit 6
+  echo -n $"Starting $prog: "
+  start_daemon daemonize -e ${stderr_log} -p ${pid_file} ${exec}
+  retval=$?
+  [ $retval -eq 0 ] && (echo_success; touch $lockfile) || echo_failure
+  echo
+  return $retval
+}
+
+stop() {
+  echo -n $"Stopping $prog: "
+  killproc -p ${pid_file} ${exec}
+  retval=$?
+  [ $retval -eq 0 ] && (echo_success; rm -f $lockfile) || echo_failure
+  echo
+  return $retval
+}
+
+restart() {
+  stop
+  start
+}
+
+reload() {
+  restart
+}
+
+force_reload() {
+  restart
+}
+
+rh_status() {
+  pid=$(pidofproc -p ${pid_file} ${prog})
+  if [ $? -eq 0 ]; then
+    echo "${prog} (pid ${pid}) is running..."
+    return 0
+  else
+    if [ -e $lockfile ]; then
+      echo "${prog} dead but lockfile exists"
+      return 2
+    else
+      echo "${prog} is stopped"
+      return 1
+    fi
+  fi
+}
+
+rh_status_q() {
+  rh_status >/dev/null 2>&1
+}
+
+# Executes the requested daemon action.
+case "${ACTION}" in
+  start)
+    rh_status_q && rh_status && exit 0
+    start
+    ;;
+  stop)
+    stop
+    ;;
+  status)
+    rh_status
+    ;;
+  restart)
+    restart
+    ;;
+  *)
+    err "ERROR: Invalid action specified."
+    usage
+    exit -3
+esac
+
+exit $?

http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/thermos-observer.logrotate
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/thermos-observer.logrotate b/build-support/packaging/rpm/thermos-observer.logrotate
new file mode 100644
index 0000000..a6a7f5c
--- /dev/null
+++ b/build-support/packaging/rpm/thermos-observer.logrotate
@@ -0,0 +1,24 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+/var/log/thermos/*.log {
+
+  daily
+  missingok
+  rotate 14
+  compress
+  delaycompress
+  notifempty
+  copytruncate
+
+}

http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/thermos-observer.service
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/thermos-observer.service b/build-support/packaging/rpm/thermos-observer.service
new file mode 100644
index 0000000..d019635
--- /dev/null
+++ b/build-support/packaging/rpm/thermos-observer.service
@@ -0,0 +1,27 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+[Unit]
+Description=Thermos Observer
+After=network.target
+Wants=network.target
+
+[Service]
+ExecStart=/usr/bin/thermos-observer-startup
+User=root
+Group=root
+Restart=always
+RestartSec=20
+LimitNOFILE=16384
+
+[Install]
+WantedBy=multi-user.target

http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/thermos-observer.startup.sh
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/thermos-observer.startup.sh b/build-support/packaging/rpm/thermos-observer.startup.sh
new file mode 100644
index 0000000..2d94fd9
--- /dev/null
+++ b/build-support/packaging/rpm/thermos-observer.startup.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+# Starts up a Thermos observer process.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+source /etc/sysconfig/thermos-observer
+
+exec /usr/bin/thermos_observer "${OBSERVER_ARGS[@]}"

http://git-wip-us.apache.org/repos/asf/aurora-packaging/blob/df6325c8/build-support/packaging/rpm/thermos-observer.sysconfig
----------------------------------------------------------------------
diff --git a/build-support/packaging/rpm/thermos-observer.sysconfig b/build-support/packaging/rpm/thermos-observer.sysconfig
new file mode 100644
index 0000000..4bc5430
--- /dev/null
+++ b/build-support/packaging/rpm/thermos-observer.sysconfig
@@ -0,0 +1,22 @@
+#!/bin/bash
+# Configuration used when executing the Thermos observer process.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+OBSERVER_ARGS=(
+  --root=/var/run/thermos
+  --port=1338
+  --log_to_disk=NONE
+  --log_to_stderr=google:INFO
+)