summarylogtreecommitdiffstats
path: root/aegir-provision.install
blob: 7afbd4798c528e10247505cdc7ea36105a9de671 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
set -e

VARLIB=/var/aegir

pre_install() {
  if [ -d $VARLIB/.drush/drush_make ]; then
    echo "existing drush_make install in $VARLIB/.drush/drush_make detected"
    echo "this needs to be removed or moved away for the install to be completed"
    echo "try: rm -rf $VARLIB/.drush/drush_make"
    exit 1
  fi
  if [ -d $VARLIB/.drush/provision ]; then
    echo "existing provision install in $VARLIB/.drush/provision detected"
    echo "this needs to be removed or moved away for the install to be completed"
    echo "try: rm -rf $VARLIB/.drush/provision"
    exit 1
  fi

}

post_install() {
  if ! getent passwd aegir >/dev/null ; then
    useradd --system --groups http --no-create-home --no-user-group \
            --home-dir "${VARLIB}" aegir
    chmod -R 755 /var/aegir
  fi

  mkdir /var/aegir/.drush
  cp /etc/php/php.ini /var/aegir/.drush/
  
  echo -e "Defaults:aegir  !requiretty\naegir ALL=NOPASSWD: /usr/bin/apachectl" > /etc/sudoers.d/aegir
  chmod 0440 /etc/sudoers.d/aegir

  # HOSTMASTER POST-INSTALL
      AEGIRHOME="$(su aegir -s /bin/sh -c 'echo $HOME')"

      case "$1" in
          configure)
              # fetch the version number from provision. the line we're looking for looks like this
              # version=6.x-1.9
              # this obviously doesn't work for git releases
              VERSION=`sed -n '/^version/{s/^.*= *//;p}' /usr/share/drush/commands/provision/provision.info`

              FLAGS="--yes"
              if [ "$DPKG_DEBUG" = "developer" ]; then
                  FLAGS="$FLAGS --debug"
              fi
              db_get "aegir/makefile"
              if [ ! -z "$RET" ]; then
                  FLAGS="$FLAGS --makefile='$RET'"
              fi
              db_get "aegir/webserver"
              if [ ! -z "$RET" ]; then
                  if [ "$RET" = 'apache2' ]; then
                      RET='apache' # convert argument to something aegir can understand
                  fi
                  FLAGS="$FLAGS --http_service_type='$RET'"
                  WEBSERVER="$RET"
              fi

              # make sure the configuration file exists before symlinking it in place (below)
              touch $AEGIRHOME/config/$WEBSERVER.conf
              # fix permissions on installed directories
              chown aegir:aegir "$AEGIRHOME" "$AEGIRHOME/config" "$AEGIRHOME/config/$WEBSERVER.conf"

              # flush the drush cache to find new commands
              su -s /bin/sh aegir -c 'drush cc drush'
              TEMPFILE=`tempfile`
              su -s /bin/sh aegir -c 'drush --pipe @hostmaster status 2>/dev/null | egrep "site_uri|drupal_root"' >> $TEMPFILE || true
              if grep -q 'site_uri' $TEMPFILE; then
                  # upgrade
                  db_stop
                  . $TEMPFILE
                  echo "Aegir frontend (@hostmaster) site detected in $drupal_root"
                  # make those paths canonical to make sure we can compare correctly
                  NEW_PLATFORM=`readlink -f "$AEGIRHOME/hostmaster-$VERSION"`
                  drupal_root=`readlink -f $drupal_root`
                  # we upgrade only if the target platform doesn't exit *OR*
                  # if it's not the current platform
                  if [ -d "$NEW_PLATFORM" ] && [ "$drupal_root" = "$NEW_PLATFORM" ]; then
                      echo "it seems to be the same version as the one we're trying to install, not upgrading"
                  else
                      echo "upgrading the frontend from $drupal_root to $NEW_PLATFORM"
                      if su -s /bin/sh aegir -c 'drush @hostmaster pm-list --status=enabled --pipe' | grep -q hosting_queued; then
                          service hosting-queued stop
                      fi
                      cd "$drupal_root"
                      su -s /bin/sh aegir -c "drush hostmaster-migrate $FLAGS '$site_uri' '$NEW_PLATFORM'"
                      echo "upgrade finished, old platform left in $drupal_root"
                      # restart daemon if enabled
                      if su -s /bin/sh aegir -c 'drush @hostmaster pm-list --status=enabled --pipe' | grep -q hosting_queued; then
                          service hosting-queued start
                      fi
                  fi
              else
                  # fresh install
                  db_get "aegir/site"
                  if [ ! -z "$RET" ]; then
                      site_uri="$RET"
                  fi
                  db_get "aegir/db_host"
                  AEGIR_DB_HOST="$RET"
                  db_get "aegir/db_user"
                  AEGIR_DB_USER="$RET"
                  db_get "aegir/db_password"
                  AEGIR_DB_PASS="$RET"
                  db_get "aegir/email"
                  EMAIL="$RET"

                  db_go

                  # forget the DB password in debconf storage
                  db_reset aegir/db_password || true
                  db_fset aegir/db_password "seen" "true" || true
                  db_stop
                  
                  if [ -d $AEGIRHOME/.drush/provision ]; then
                      echo "existing provision in $AEGIRHOME/.drush/provision detected, move away and try again"
                      exit 1
                  fi
                  echo "installing the Aegir frontend (Drupal with the hostmaster profile), please wait..."
                  if [ "$DPKG_DEBUG" = "developer" ]; then
                      DEBUG="--debug"
                  fi

                  # pass data through JSON for extra security
                  su -s /bin/sh aegir -c "cd $AEGIRHOME && drush hostmaster-install $FLAGS --backend $site_uri 2>&1 | drush backend-parse $DEBUG" <<EOF
      { "yes": 1,
        "version": "$VERSION",
        "aegir_db_host": "$AEGIR_DB_HOST",
        "aegir_db_user": "$AEGIR_DB_USER",
        "aegir_db_pass": "$AEGIR_DB_PASS",
        "client_email": "$EMAIL"
      }
      EOF
                  # on new installs, we default to having the daemon enabled
                  echo 'Enabling hosting-queued daemon'
                  su -s /bin/sh aegir -c 'drush @hostmaster pm-enable -y hosting_queued'
                  service hosting-queued start
              fi
              rm -f $TEMPFILE

              case $WEBSERVER in
                  apache)
                      # apache 2.2 || 2.4
                      ln -sf $AEGIRHOME/config/$WEBSERVER.conf /etc/apache2/conf.d/aegir.conf \
                        || ln -sf $VARLIB/config/$WEBSERVER.conf /etc/apache2/conf-enabled/aegir.conf
                      a2enmod ssl rewrite
                      apache2ctl graceful
                      ;;
                  nginx)
                      ln -sf $AEGIRHOME/config/$WEBSERVER.conf /etc/nginx/conf.d/aegir.conf
                      service nginx reload
                      ;;
              esac

              # this will ensure that this script aborts if the site can't be bootstrapped
              if su -s /bin/sh aegir -c 'drush @hostmaster status' 2>&1 | grep -q 'Drupal bootstrap.*Successful'; then
                  echo 'Aegir frontend bootstrap correctly, operation was a success!'
                  echo 'Use this URL to login on your new site:'
                  su -s /bin/sh aegir -c 'drush @hostmaster uli'
              else
                  echo 'Aegir frontend failed to bootstrap, something went wrong!'
                  echo 'Look at the log above for clues or run with DPKG_DEBUG=developer'
                  exit 1
              fi
          ;;

          abort-upgrade|abort-remove|abort-deconfigure)
          ;;

          *)
              echo "postinst called with unknown argument \`$1'" >&2
              exit 1
          ;;
      esac

      # dh_installdeb will replace this with shell code automatically
      # generated by other debhelper scripts.

      # Automatically added by dh_installinit
      if [ -x "/etc/init.d/hosting-queued" ]; then
        update-rc.d hosting-queued defaults >/dev/null
        invoke-rc.d hosting-queued start || exit $?
      fi
      # End automatically added section


      exit 0



}

pre_upgrade() {
  pre_install
}

## arg 1:  the new package version
## arg 2:  the old package version
#post_upgrade() {
	# do something here
#}

pre_remove() {
  systemctl --system stop hosting-queued >/dev/null
}

post_remove() {
  userdel aegir
  rm -f /etc/sudoers.d/aegir

  systemctl --system disable hosting-queued >/dev/null
  systemctl --system daemon-reload >/dev/null
}