build_pkg.sh 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. #!/bin/bash
  2. ############################################################################
  3. #
  4. # Title: Build Package Script for macOS
  5. # Authors: CR Oldham, Shane Lee
  6. # Date: December 2015
  7. #
  8. # Description: This creates an macOS package for Salt from the contents of
  9. # /opt/salt
  10. #
  11. # Requirements:
  12. # - XCode Command Line Tools (xcode-select --install)
  13. #
  14. # Usage:
  15. # This script can be passed 2 parameters
  16. # $1 : <version> : the version name to give the package (overrides
  17. # version of the git repo) (Defaults to the git repo version)
  18. # $2 : <python ver> : the version of python that was built (defaults
  19. # to 2)
  20. # $3 : <package dir> : the staging area for the package defaults to
  21. # /tmp/salt_pkg
  22. #
  23. # Example:
  24. # The following will build Salt version 2017.7.0 with Python 3 and
  25. # stage all files in /tmp/salt_pkg:
  26. #
  27. # ./build.sh 2017.7.0 3
  28. #
  29. ############################################################################
  30. ############################################################################
  31. # Make sure the script is launched with sudo
  32. ############################################################################
  33. if [[ $(id -u) -ne 0 ]]
  34. then
  35. exec sudo /bin/bash -c "$(printf '%q ' "$BASH_SOURCE" "$@")"
  36. fi
  37. ############################################################################
  38. # Set to Exit on all Errors
  39. ############################################################################
  40. trap 'quit_on_error $LINENO $BASH_COMMAND' ERR
  41. quit_on_error() {
  42. echo "$(basename $0) caught error on line : $1 command was: $2"
  43. exit -1
  44. }
  45. ############################################################################
  46. # Check passed parameters, set defaults
  47. ############################################################################
  48. # Get/Set Version
  49. if [ "$1" == "" ]; then
  50. VERSION=`git describe`
  51. else
  52. VERSION=$1
  53. fi
  54. # Get/Set Python Version
  55. if [ "$2" == "" ]; then
  56. PYVER=2
  57. else
  58. PYVER=$2
  59. fi
  60. # Get/Set temp directory
  61. if [ "$3" == "" ]; then
  62. PKGDIR=/tmp/salt_pkg
  63. else
  64. PKGDIR=$3
  65. fi
  66. CPUARCH=`uname -m`
  67. ############################################################################
  68. # Additional Parameters Required for the script to function properly
  69. ############################################################################
  70. echo -n -e "\033]0;Build_Pkg: Variables\007"
  71. SRCDIR=`git rev-parse --show-toplevel`
  72. PKGRESOURCES=$SRCDIR/pkg/osx
  73. ############################################################################
  74. # Make sure this is the Salt Repository
  75. ############################################################################
  76. if [[ ! -e "$SRCDIR/.git" ]] && [[ ! -e "$SRCDIR/scripts/salt" ]]; then
  77. echo "This directory doesn't appear to be a git repository."
  78. echo "The macOS build process needs some files from a Git checkout of Salt."
  79. echo "Run this script from the 'pkg/osx' directory of the Git checkout."
  80. exit -1
  81. fi
  82. ############################################################################
  83. # Ensure Paths are present and clean
  84. ############################################################################
  85. echo -n -e "\033]0;Build_Pkg: Clean Staging Area\007"
  86. # Clean folder in the staging area
  87. rm -rdf $PKGDIR
  88. mkdir -p $PKGDIR
  89. ############################################################################
  90. # Copy Start Scripts from Salt Repo to /opt/salt
  91. ############################################################################
  92. echo -n -e "\033]0;Build_Pkg: Copy Start Scripts\007"
  93. cp $PKGRESOURCES/scripts/start-*.sh /opt/salt/bin/
  94. cp $PKGRESOURCES/scripts/salt-config.sh /opt/salt/bin
  95. ############################################################################
  96. # Copy Service Definitions from Salt Repo to the Package Directory
  97. ############################################################################
  98. echo -n -e "\033]0;Build_Pkg: Copy Service Definitions\007"
  99. mkdir -p $PKGDIR/opt
  100. cp -r /opt/salt $PKGDIR/opt
  101. mkdir -p $PKGDIR/Library/LaunchDaemons $PKGDIR/etc
  102. cp $PKGRESOURCES/scripts/com.saltstack.salt.minion.plist $PKGDIR/Library/LaunchDaemons
  103. cp $PKGRESOURCES/scripts/com.saltstack.salt.master.plist $PKGDIR/Library/LaunchDaemons
  104. cp $PKGRESOURCES/scripts/com.saltstack.salt.syndic.plist $PKGDIR/Library/LaunchDaemons
  105. cp $PKGRESOURCES/scripts/com.saltstack.salt.api.plist $PKGDIR/Library/LaunchDaemons
  106. ############################################################################
  107. # Remove unnecessary files from the package
  108. ############################################################################
  109. echo -n -e "\033]0;Build_Pkg: Trim unneeded files\007"
  110. rm -rdf $PKGDIR/opt/salt/bin/pkg-config
  111. rm -rdf $PKGDIR/opt/salt/lib/pkgconfig
  112. rm -rdf $PKGDIR/opt/salt/lib/engines
  113. rm -rdf $PKGDIR/opt/salt/share/aclocal
  114. rm -rdf $PKGDIR/opt/salt/share/doc
  115. rm -rdf $PKGDIR/opt/salt/share/man/man1/pkg-config.1
  116. if [ "$PYVER" == "2" ]; then
  117. rm -rdf $PKGDIR/opt/salt/lib/python2.7/test
  118. else
  119. rm -rdf $PKGDIR/opt/salt/lib/python3.5/test
  120. fi
  121. echo -n -e "\033]0;Build_Pkg: Remove compiled python files\007"
  122. find $PKGDIR/opt/salt -name '*.pyc' -type f -delete
  123. ############################################################################
  124. # Copy Config Files from Salt Repo to the Package Directory
  125. ############################################################################
  126. echo -n -e "\033]0;Build_Pkg: Copy Config Files\007"
  127. mkdir -p $PKGDIR/etc/salt
  128. cp $SRCDIR/conf/minion $PKGDIR/etc/salt/minion.dist
  129. cp $SRCDIR/conf/master $PKGDIR/etc/salt/master.dist
  130. ############################################################################
  131. # Add Version and CPU Arch to distribution.xml
  132. ############################################################################
  133. echo -n -e "\033]0;Build_Pkg: Add Version to .xml\007"
  134. if [ "$PYVER" == "2" ]; then
  135. TITLE="Salt $VERSION"
  136. DESC="Salt $VERSION with Python 2"
  137. SEDSTR="s/@PY2@/_py2/g"
  138. else
  139. TITLE="Salt $VERSION (Python 3)"
  140. DESC="Salt $VERSION with Python 3"
  141. SEDSTR="s/@PY2@//g"
  142. fi
  143. cd $PKGRESOURCES
  144. cp distribution.xml.dist distribution.xml
  145. # Select the appropriate welcome text
  146. # This is only necessary until Sodium, then this can be removed
  147. sed -E -i '' "$SEDSTR" distribution.xml
  148. SEDSTR="s/@TITLE@/$TITLE/g"
  149. sed -E -i '' "$SEDSTR" distribution.xml
  150. SEDSTR="s/@DESC@/$DESC/g"
  151. sed -E -i '' "$SEDSTR" distribution.xml
  152. SEDSTR="s/@VERSION@/$VERSION/g"
  153. sed -E -i '' "$SEDSTR" distribution.xml
  154. SEDSTR="s/@PYVER@/$PYVER/g"
  155. sed -E -i '' "$SEDSTR" distribution.xml
  156. SEDSTR="s/@CPUARCH@/$CPUARCH/g"
  157. sed -i '' "$SEDSTR" distribution.xml
  158. ############################################################################
  159. # Build the Package
  160. ############################################################################
  161. echo -n -e "\033]0;Build_Pkg: Build Package\007"
  162. pkgbuild --root=$PKGDIR \
  163. --scripts=pkg-scripts \
  164. --identifier=com.saltstack.salt \
  165. --version=$VERSION \
  166. --ownership=recommended salt-src-$VERSION-py$PYVER-$CPUARCH.pkg
  167. productbuild --resources=pkg-resources \
  168. --distribution=distribution.xml \
  169. --package-path=salt-src-$VERSION-py$PYVER-$CPUARCH.pkg \
  170. --version=$VERSION salt-$VERSION-py$PYVER-$CPUARCH.pkg