|
| 1 | +#!/bin/sh |
| 2 | +# preinst script for st2 |
| 3 | +# |
| 4 | +# see: dh_installdeb(1) |
| 5 | + |
| 6 | +set -e |
| 7 | + |
| 8 | +# summary of how this script can be called: |
| 9 | +# * <new-preinst> `install' |
| 10 | +# * <new-preinst> `install' <old-version> |
| 11 | +# * <new-preinst> `upgrade' <old-version> |
| 12 | +# * <old-preinst> `abort-upgrade' <new-version> |
| 13 | +# for details, see http://www.debian.org/doc/debian-policy/ or |
| 14 | +# the debian-policy package |
| 15 | + |
| 16 | +PACKS_GROUP=st2packs |
| 17 | +SYS_USER=stanley |
| 18 | +ST2_USER=st2 |
| 19 | +ST2_CONFPATH="/etc/st2/st2.conf" |
| 20 | +ST2_UPGRADESTAMP="/tmp/.stamp-stackstorm-st2-deb-package" |
| 21 | + |
| 22 | +## Permissions of directories which has to be reset on upgrade |
| 23 | +RESET_PERMS=$(cat <<EHD | sed 's/\s\+/ /g' |
| 24 | +ug+rw root:_packsgroup /opt/stackstorm/packs |
| 25 | +ug+rw root:_packsgroup /usr/share/doc/st2/examples |
| 26 | +ug+rw root:_packsgroup /opt/stackstorm/virtualenvs |
| 27 | +755 _st2user:root /opt/stackstorm/configs |
| 28 | +755 _st2user:root /opt/stackstorm/overrides |
| 29 | +755 _st2user:root /opt/stackstorm/exports |
| 30 | +EHD |
| 31 | +) |
| 32 | + |
| 33 | +## Create stackstorm users and groups |
| 34 | +create_users() { |
| 35 | + # create st2 user (services user) |
| 36 | + (id $ST2_USER 1>/dev/null 2>&1) || |
| 37 | + adduser --group --disabled-password --no-create-home --system $ST2_USER |
| 38 | + |
| 39 | + # make st2 member of st2packs group |
| 40 | + (getent group $PACKS_GROUP 1>/dev/null 2>&1) || groupadd -r $PACKS_GROUP |
| 41 | + (groups $ST2_USER 2>/dev/null | grep -q "\b${PACKS_GROUP}\b") || |
| 42 | + usermod -a -G $PACKS_GROUP $ST2_USER |
| 43 | + |
| 44 | + # create stanley user (for actionrunner service) |
| 45 | + if (! id $SYS_USER 1>/dev/null 2>&1); then |
| 46 | + adduser --group $SYS_USER |
| 47 | + adduser --disabled-password --gecos "" --ingroup $SYS_USER $SYS_USER |
| 48 | + fi |
| 49 | +} |
| 50 | + |
| 51 | +## [NOT USED!] Get current system user from the st2.conf |
| 52 | +config_sysuser() { |
| 53 | + # exit hooked |
| 54 | + return 0 |
| 55 | + local sysuser= |
| 56 | + if [ -f $ST2_CONFPATH ]; then |
| 57 | + sysuser=$(cat $ST2_CONFPATH | |
| 58 | + sed -n -e '/\[system_user\]/,/\[.*\]\|\$/ { /\[.*\]/d; /user\s*=/ { s/\s*user\s*=\s*//; p } }') |
| 59 | + fi |
| 60 | + echo $sysuser |
| 61 | +} |
| 62 | + |
| 63 | +## Update logrotate configuration |
| 64 | +enable_logrotate() { |
| 65 | + [ -f /etc/logrotate.d/st2-pkgsaved.disabled ] && |
| 66 | + mv -f /etc/logrotate.d/st2-pkgsaved.disabled /etc/logrotate.d/st2 || : |
| 67 | +} |
| 68 | + |
| 69 | +## Fix directories permissions on upgrade (different across maint scripts!) |
| 70 | +# NB! USED FOR COMPATIBILITY ON UPGRADE FROM PREVIOUS VERSIONS OF PACKAGES. |
| 71 | +# NB! In future package releases reseting permissions SHOULD BE REMOVED. |
| 72 | +# |
| 73 | +set_permissions() { |
| 74 | + local fileperms="$1" mode= ownership= path= current_ownership= user= group= |
| 75 | + |
| 76 | + echo "$fileperms" | sed -e "s/_packsgroup/$PACKS_GROUP/g" -e "s/_st2user/$ST2_USER/g" | |
| 77 | + while read mode ownership path; do |
| 78 | + user=$(echo $ownership | cut -f1 -d:) |
| 79 | + group=$(echo $ownership | cut -f2 -d:) |
| 80 | + # set top level permissions whether it's a file or directory |
| 81 | + [ -e $path ] || continue |
| 82 | + chown $ownership $path && chmod $mode $path |
| 83 | + |
| 84 | + # recursively change permissions of children (since those are directories) |
| 85 | + find $path -mindepth 1 -maxdepth 1 -not \( -user $user -group $group \) | |
| 86 | + xargs -I {} sh -c "echo chown -R $ownership {} && echo chmod -R $mode {}" |
| 87 | + done |
| 88 | +} |
| 89 | + |
| 90 | +case "$1" in |
| 91 | + install) |
| 92 | + create_users |
| 93 | + enable_logrotate |
| 94 | + ;; |
| 95 | + upgrade) |
| 96 | + create_users |
| 97 | + enable_logrotate |
| 98 | + set_permissions "$RESET_PERMS" |
| 99 | + touch $ST2_UPGRADESTAMP |
| 100 | + ;; |
| 101 | + abort-upgrade) |
| 102 | + ;; |
| 103 | + *) |
| 104 | + echo "preinst called with unknown argument \`$1'" >&2 |
| 105 | + exit 1 |
| 106 | + ;; |
| 107 | +esac |
| 108 | + |
| 109 | +# dh_installdeb will replace this with shell code automatically |
| 110 | +# generated by other debhelper scripts. |
| 111 | + |
| 112 | +#DEBHELPER# |
| 113 | + |
| 114 | +exit 0 |
0 commit comments