123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- #!/bin/bash
- ############################################################################
- #
- # Title: Build Package Script for macOS
- # Authors: CR Oldham, Shane Lee
- # Date: December 2015
- #
- # Description: This creates an macOS package for Salt from the contents of
- # /opt/salt
- #
- # Requirements:
- # - XCode Command Line Tools (xcode-select --install)
- #
- # Usage:
- # This script can be passed 2 parameters
- # $1 : <version> : the version name to give the package (overrides
- # version of the git repo) (Defaults to the git repo version)
- # $2 : <python ver> : the version of python that was built (defaults
- # to 2)
- # $3 : <package dir> : the staging area for the package defaults to
- # /tmp/salt_pkg
- #
- # Example:
- # The following will build Salt version 2017.7.0 with Python 3 and
- # stage all files in /tmp/salt_pkg:
- #
- # ./build.sh 2017.7.0 3
- #
- ############################################################################
- ############################################################################
- # Make sure the script is launched with sudo
- ############################################################################
- if [[ $(id -u) -ne 0 ]]
- then
- exec sudo /bin/bash -c "$(printf '%q ' "$BASH_SOURCE" "$@")"
- fi
- ############################################################################
- # Set to Exit on all Errors
- ############################################################################
- trap 'quit_on_error $LINENO $BASH_COMMAND' ERR
- quit_on_error() {
- echo "$(basename $0) caught error on line : $1 command was: $2"
- exit -1
- }
- ############################################################################
- # Check passed parameters, set defaults
- ############################################################################
- # Get/Set Version
- if [ "$1" == "" ]; then
- VERSION=`git describe`
- else
- VERSION=$1
- fi
- # Get/Set Python Version
- if [ "$2" == "" ]; then
- PYVER=2
- else
- PYVER=$2
- fi
- # Get/Set temp directory
- if [ "$3" == "" ]; then
- PKGDIR=/tmp/salt_pkg
- else
- PKGDIR=$3
- fi
- CPUARCH=`uname -m`
- ############################################################################
- # Additional Parameters Required for the script to function properly
- ############################################################################
- echo -n -e "\033]0;Build_Pkg: Variables\007"
- SRCDIR=`git rev-parse --show-toplevel`
- PKGRESOURCES=$SRCDIR/pkg/osx
- ############################################################################
- # Make sure this is the Salt Repository
- ############################################################################
- if [[ ! -e "$SRCDIR/.git" ]] && [[ ! -e "$SRCDIR/scripts/salt" ]]; then
- echo "This directory doesn't appear to be a git repository."
- echo "The macOS build process needs some files from a Git checkout of Salt."
- echo "Run this script from the 'pkg/osx' directory of the Git checkout."
- exit -1
- fi
- ############################################################################
- # Ensure Paths are present and clean
- ############################################################################
- echo -n -e "\033]0;Build_Pkg: Clean Staging Area\007"
- # Clean folder in the staging area
- rm -rdf $PKGDIR
- mkdir -p $PKGDIR
- ############################################################################
- # Copy Start Scripts from Salt Repo to /opt/salt
- ############################################################################
- echo -n -e "\033]0;Build_Pkg: Copy Start Scripts\007"
- cp $PKGRESOURCES/scripts/start-*.sh /opt/salt/bin/
- cp $PKGRESOURCES/scripts/salt-config.sh /opt/salt/bin
- ############################################################################
- # Copy Service Definitions from Salt Repo to the Package Directory
- ############################################################################
- echo -n -e "\033]0;Build_Pkg: Copy Service Definitions\007"
- mkdir -p $PKGDIR/opt
- cp -r /opt/salt $PKGDIR/opt
- mkdir -p $PKGDIR/Library/LaunchDaemons $PKGDIR/etc
- cp $PKGRESOURCES/scripts/com.saltstack.salt.minion.plist $PKGDIR/Library/LaunchDaemons
- cp $PKGRESOURCES/scripts/com.saltstack.salt.master.plist $PKGDIR/Library/LaunchDaemons
- cp $PKGRESOURCES/scripts/com.saltstack.salt.syndic.plist $PKGDIR/Library/LaunchDaemons
- cp $PKGRESOURCES/scripts/com.saltstack.salt.api.plist $PKGDIR/Library/LaunchDaemons
- ############################################################################
- # Remove unnecessary files from the package
- ############################################################################
- echo -n -e "\033]0;Build_Pkg: Trim unneeded files\007"
- rm -rdf $PKGDIR/opt/salt/bin/pkg-config
- rm -rdf $PKGDIR/opt/salt/lib/pkgconfig
- rm -rdf $PKGDIR/opt/salt/lib/engines
- rm -rdf $PKGDIR/opt/salt/share/aclocal
- rm -rdf $PKGDIR/opt/salt/share/doc
- rm -rdf $PKGDIR/opt/salt/share/man/man1/pkg-config.1
- if [ "$PYVER" == "2" ]; then
- rm -rdf $PKGDIR/opt/salt/lib/python2.7/test
- else
- rm -rdf $PKGDIR/opt/salt/lib/python3.5/test
- fi
- echo -n -e "\033]0;Build_Pkg: Remove compiled python files\007"
- find $PKGDIR/opt/salt -name '*.pyc' -type f -delete
- ############################################################################
- # Copy Config Files from Salt Repo to the Package Directory
- ############################################################################
- echo -n -e "\033]0;Build_Pkg: Copy Config Files\007"
- mkdir -p $PKGDIR/etc/salt
- cp $SRCDIR/conf/minion $PKGDIR/etc/salt/minion.dist
- cp $SRCDIR/conf/master $PKGDIR/etc/salt/master.dist
- ############################################################################
- # Add Version and CPU Arch to distribution.xml
- ############################################################################
- echo -n -e "\033]0;Build_Pkg: Add Version to .xml\007"
- if [ "$PYVER" == "2" ]; then
- TITLE="Salt $VERSION"
- DESC="Salt $VERSION with Python 2"
- SEDSTR="s/@PY2@/_py2/g"
- else
- TITLE="Salt $VERSION (Python 3)"
- DESC="Salt $VERSION with Python 3"
- SEDSTR="s/@PY2@//g"
- fi
- cd $PKGRESOURCES
- cp distribution.xml.dist distribution.xml
- # Select the appropriate welcome text
- # This is only necessary until Sodium, then this can be removed
- sed -E -i '' "$SEDSTR" distribution.xml
- SEDSTR="s/@TITLE@/$TITLE/g"
- sed -E -i '' "$SEDSTR" distribution.xml
- SEDSTR="s/@DESC@/$DESC/g"
- sed -E -i '' "$SEDSTR" distribution.xml
- SEDSTR="s/@VERSION@/$VERSION/g"
- sed -E -i '' "$SEDSTR" distribution.xml
- SEDSTR="s/@PYVER@/$PYVER/g"
- sed -E -i '' "$SEDSTR" distribution.xml
- SEDSTR="s/@CPUARCH@/$CPUARCH/g"
- sed -i '' "$SEDSTR" distribution.xml
- ############################################################################
- # Build the Package
- ############################################################################
- echo -n -e "\033]0;Build_Pkg: Build Package\007"
- pkgbuild --root=$PKGDIR \
- --scripts=pkg-scripts \
- --identifier=com.saltstack.salt \
- --version=$VERSION \
- --ownership=recommended salt-src-$VERSION-py$PYVER-$CPUARCH.pkg
- productbuild --resources=pkg-resources \
- --distribution=distribution.xml \
- --package-path=salt-src-$VERSION-py$PYVER-$CPUARCH.pkg \
- --version=$VERSION salt-$VERSION-py$PYVER-$CPUARCH.pkg
|