| 1 | # Copyright 1999-2004 Gentoo Technologies, Inc. |
1 | # Copyright 1999-2004 Gentoo Technologies, Inc. |
| 2 | # Distributed under the terms of the GNU General Public License v2 |
2 | # Distributed under the terms of the GNU General Public License v2 |
| 3 | # $Header: /var/cvsroot/gentoo-x86/eclass/webapp.eclass,v 1.17 2004/05/11 19:31:29 stuart Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/webapp.eclass,v 1.18 2004/05/17 22:44:35 stuart Exp $ |
| 4 | # |
4 | # |
| 5 | # eclass/webapp.eclass |
5 | # eclass/webapp.eclass |
| 6 | # Eclass for installing applications to run under a web server |
6 | # Eclass for installing applications to run under a web server |
| 7 | # |
7 | # |
| 8 | # Part of the implementation of GLEP #11 |
8 | # Part of the implementation of GLEP #11 |
| 9 | # |
9 | # |
| 10 | # Author(s) Stuart Herbert <stuart@gentoo.org> |
10 | # Author(s) Stuart Herbert <stuart@gentoo.org> |
| 11 | # |
11 | # |
| 12 | # ------------------------------------------------------------------------ |
12 | # ------------------------------------------------------------------------ |
| 13 | # |
13 | # |
| 14 | # Please do not make modifications to this file without checking with a |
14 | # The master copy of this eclass is held in Stu's subversion repository. |
| 15 | # member of the web-apps herd first! |
15 | # |
|
|
16 | # If you make changes to this file and don't tell Stu, chances are that |
|
|
17 | # your changes will be overwritten the next time Stu releases a new version |
|
|
18 | # of webapp-config. |
| 16 | # |
19 | # |
| 17 | # ------------------------------------------------------------------------ |
20 | # ------------------------------------------------------------------------ |
| 18 | |
21 | |
| 19 | ECLASS=webapp |
22 | ECLASS=webapp |
| 20 | INHERITED="$INHERITED $ECLASS" |
23 | INHERITED="$INHERITED $ECLASS" |
| 21 | SLOT="${PVR}" |
24 | SLOT="${PVR}" |
| 22 | IUSE="$IUSE vhosts" |
25 | IUSE="$IUSE vhosts" |
| 23 | DEPEND="$DEPEND >=net-www/webapp-config-1.8" |
26 | DEPEND="$DEPEND >=net-www/webapp-config-1.9 app-portage/gentoolkit" |
| 24 | |
27 | |
| 25 | EXPORT_FUNCTIONS pkg_postinst pkg_setup src_install |
28 | EXPORT_FUNCTIONS pkg_postinst pkg_setup src_install pkg_prerm |
| 26 | |
29 | |
| 27 | INSTALL_DIR="/$PN" |
30 | INSTALL_DIR="/$PN" |
| 28 | IS_UPGRADE=0 |
31 | IS_UPGRADE=0 |
| 29 | IS_REPLACE=0 |
32 | IS_REPLACE=0 |
| 30 | |
33 | |
| … | |
… | |
| 121 | } |
124 | } |
| 122 | |
125 | |
| 123 | # ------------------------------------------------------------------------ |
126 | # ------------------------------------------------------------------------ |
| 124 | # EXPORTED FUNCTION - FOR USE IN EBUILDS |
127 | # EXPORTED FUNCTION - FOR USE IN EBUILDS |
| 125 | # |
128 | # |
|
|
129 | # Install a script that will run after a virtual copy is created, and |
|
|
130 | # before a virtual copy has been removed |
|
|
131 | # |
|
|
132 | # @param $1 - the script to run |
|
|
133 | # ------------------------------------------------------------------------ |
|
|
134 | |
|
|
135 | function webapp_hook_script () |
|
|
136 | { |
|
|
137 | webapp_checkfileexists "$2" |
|
|
138 | |
|
|
139 | einfo "(hook) $1" |
|
|
140 | cp "$1" "${D}${MY_HOOKSCRIPTSDIR}/`basename $1`" || die "Unable to install $1 into ${D}${MY_HOOKSCRIPTSDIR}/" |
|
|
141 | chmod 555 "${D}${MY_HOOKSCRIPTSDIR}/`basename $1`" |
|
|
142 | } |
|
|
143 | |
|
|
144 | # ------------------------------------------------------------------------ |
|
|
145 | # EXPORTED FUNCTION - FOR USE IN EBUILDS |
|
|
146 | # |
| 126 | # Install a text file containing post-installation instructions. |
147 | # Install a text file containing post-installation instructions. |
| 127 | # |
148 | # |
| 128 | # @param $1 - language code (use 'en' for now) |
149 | # @param $1 - language code (use 'en' for now) |
| 129 | # @param $2 - the file to install |
150 | # @param $2 - the file to install |
| 130 | # ------------------------------------------------------------------------ |
151 | # ------------------------------------------------------------------------ |
| … | |
… | |
| 183 | } |
204 | } |
| 184 | |
205 | |
| 185 | # ------------------------------------------------------------------------ |
206 | # ------------------------------------------------------------------------ |
| 186 | # EXPORTED FUNCTION - FOR USE IN EBUILDS |
207 | # EXPORTED FUNCTION - FOR USE IN EBUILDS |
| 187 | # |
208 | # |
|
|
209 | # @param $1 - the webserver to install the config file for |
|
|
210 | # (one of apache1, apache2, cherokee) |
|
|
211 | # @param $2 - the config file to install |
|
|
212 | # @param $3 - new name for the config file (default is `basename $2`) |
|
|
213 | # this is an optional parameter |
|
|
214 | # |
|
|
215 | # NOTE: |
|
|
216 | # this function will automagically prepend $1 to the front of your |
|
|
217 | # config file's name |
|
|
218 | # ------------------------------------------------------------------------ |
|
|
219 | |
|
|
220 | function webapp_server_config () |
|
|
221 | { |
|
|
222 | webapp_checkfileexists "$2" |
|
|
223 | |
|
|
224 | # sort out what the name will be of the config file |
|
|
225 | |
|
|
226 | local my_file |
|
|
227 | |
|
|
228 | if [ -z "$3" ]; then |
|
|
229 | $my_file="$1-`basename $2`" |
|
|
230 | else |
|
|
231 | $my_file="$1-$3" |
|
|
232 | fi |
|
|
233 | |
|
|
234 | # warning: |
|
|
235 | # |
|
|
236 | # do NOT change the naming convention used here without changing all |
|
|
237 | # the other scripts that also rely upon these names |
|
|
238 | |
|
|
239 | einfo "($1) config file '$my_file'" |
|
|
240 | cp "$2" "${D}${MY_SERVERCONFIGDIR}/${my_file}" |
|
|
241 | } |
|
|
242 | |
|
|
243 | # ------------------------------------------------------------------------ |
|
|
244 | # EXPORTED FUNCTION - FOR USE IN EBUILDS |
| 188 | # |
245 | # |
| 189 | # @param $1 - the db engine that the script is for |
246 | # @param $1 - the db engine that the script is for |
| 190 | # (one of: mysql|postgres) |
247 | # (one of: mysql|postgres) |
| 191 | # @param $2 - the sql script to be installed |
248 | # @param $2 - the sql script to be installed |
| 192 | # @param $3 - the older version of the app that this db script |
249 | # @param $3 - the older version of the app that this db script |
| … | |
… | |
| 234 | # the final version! |
291 | # the final version! |
| 235 | # ------------------------------------------------------------------------ |
292 | # ------------------------------------------------------------------------ |
| 236 | |
293 | |
| 237 | function webapp_src_install () |
294 | function webapp_src_install () |
| 238 | { |
295 | { |
| 239 | chown -R root:root ${D}/ |
296 | chown -R ${VHOST_DEFAULT_UID}:${VHOST_DEFAULT_GID} ${D}/ |
| 240 | chmod -R u-s ${D}/ |
297 | chmod -R u-s ${D}/ |
| 241 | chmod -R g-s ${D}/ |
298 | chmod -R g-s ${D}/ |
| 242 | |
299 | |
| 243 | keepdir ${MY_PERSISTDIR} |
300 | keepdir ${MY_PERSISTDIR} |
| 244 | fowners root:root ${MY_PERSISTDIR} |
301 | fowners root:root ${MY_PERSISTDIR} |
| … | |
… | |
| 263 | die "ebuild sets SLOT, overrides webapp.eclass" |
320 | die "ebuild sets SLOT, overrides webapp.eclass" |
| 264 | fi |
321 | fi |
| 265 | |
322 | |
| 266 | # pull in the shared configuration file |
323 | # pull in the shared configuration file |
| 267 | |
324 | |
|
|
325 | G_HOSTNAME="localhost" |
| 268 | . /etc/vhosts/webapp-config || die "Unable to open /etc/vhosts/webapp-config file" |
326 | . /etc/vhosts/webapp-config || die "Unable to open /etc/vhosts/webapp-config file" |
| 269 | } |
|
|
| 270 | |
327 | |
| 271 | function webapp_getinstalltype () |
328 | # are we installing a webapp-config solution over the top of a |
|
|
329 | # non-webapp-config solution? |
|
|
330 | |
|
|
331 | if ! use vhosts ; then |
|
|
332 | local my_dir="$VHOST_ROOT/$MY_HTDOCSBASE/$PN" |
|
|
333 | local my_output |
|
|
334 | |
|
|
335 | if [ -d "$my_dir" ] ; then |
|
|
336 | einfo "You already have something installed in $my_dir" |
|
|
337 | einfo "Are you trying to install over the top of something I cannot upgrade?" |
|
|
338 | |
|
|
339 | my_output="`webapp_check_installedat`" |
|
|
340 | |
|
|
341 | if [ "$?" != "0" ]; then |
|
|
342 | |
|
|
343 | # okay, whatever is there, it isn't webapp-config-compatible |
|
|
344 | ewarn |
|
|
345 | ewarn "Whatever is in $my_dir, it's not" |
|
|
346 | ewarn "compatible with webapp-config." |
|
|
347 | ewarn |
|
|
348 | |
|
|
349 | my_output="`qpkg -nc -v -f $my_dir`" |
|
|
350 | if [ -n "$my_output" ]; then |
|
|
351 | eerror "Please remove $my_output and re-emerge." |
|
|
352 | else |
|
|
353 | eerror "Please remove the contents of $my_dir, and then re-emerge." |
|
|
354 | fi |
|
|
355 | die "Cannot upgrade contents of $my_dir" |
|
|
356 | elif [ "`echo $my_output | awk '{ print $1 }'`" != "$PN" ]; then |
|
|
357 | eerror "$my_dir contains $my_output" |
|
|
358 | eerror "I cannot upgrade that" |
|
|
359 | die "Cannot upgrade contents of $my_dir" |
|
|
360 | else |
|
|
361 | einfo |
|
|
362 | einfo "I can upgrade the contents of $my_dir" |
|
|
363 | einfo |
|
|
364 | fi |
|
|
365 | fi |
|
|
366 | fi |
|
|
367 | } |
|
|
368 | |
|
|
369 | function webapp_someunusedfunction () |
| 272 | { |
370 | { |
| 273 | # are we emerging something that is already installed? |
371 | # are we emerging something that is already installed? |
| 274 | |
372 | |
| 275 | if [ -d "${D}${MY_APPROOT}/${MY_APPSUFFIX}" ]; then |
373 | if [ -d "${D}${MY_APPROOT}/${MY_APPSUFFIX}" ]; then |
| 276 | # yes we are |
374 | # yes we are |
| 277 | ewarn "Removing existing copy of ${PN}-${PVR}" |
375 | ewarn "Removing existing copy of ${PN}-${PVR}" |
| 278 | rm -rf "${D}${MY_APPROOT}/${MY_APPSUFFIX}" |
376 | rm -rf "${D}${MY_APPROOT}/${MY_APPSUFFIX}" |
| 279 | fi |
377 | fi |
|
|
378 | } |
| 280 | |
379 | |
|
|
380 | function webapp_getinstalltype () |
|
|
381 | { |
| 281 | # or are we upgrading? |
382 | # or are we upgrading? |
| 282 | |
383 | |
| 283 | if ! use vhosts ; then |
384 | if ! use vhosts ; then |
| 284 | # we only run webapp-config if vhosts USE flag is not set |
385 | # we only run webapp-config if vhosts USE flag is not set |
| 285 | |
386 | |
| … | |
… | |
| 303 | IS_UPGRADE=1 |
404 | IS_UPGRADE=1 |
| 304 | else |
405 | else |
| 305 | einfo "This is a re-installation" |
406 | einfo "This is a re-installation" |
| 306 | IS_REPLACE=1 |
407 | IS_REPLACE=1 |
| 307 | fi |
408 | fi |
|
|
409 | else |
|
|
410 | einfo "$my_ouptut is installed there" |
| 308 | fi |
411 | fi |
|
|
412 | else |
|
|
413 | einfo "This is an installation" |
| 309 | fi |
414 | fi |
| 310 | fi |
415 | fi |
| 311 | } |
416 | } |
| 312 | |
417 | |
| 313 | function webapp_src_preinst () |
418 | function webapp_src_preinst () |
| … | |
… | |
| 379 | # the user is relying on portage to do the magical thing for it |
484 | # the user is relying on portage to do the magical thing for it |
| 380 | |
485 | |
| 381 | if [ "$IS_UPGRADE" = "1" ] ; then |
486 | if [ "$IS_UPGRADE" = "1" ] ; then |
| 382 | einfo "Removing old version $REMOVE_PKG" |
487 | einfo "Removing old version $REMOVE_PKG" |
| 383 | |
488 | |
| 384 | echo emerge -C $CATEGORY/$REMOVE_PKG |
489 | emerge -C $CATEGORY/$REMOVE_PKG |
| 385 | fi |
490 | fi |
|
|
491 | else |
|
|
492 | # vhosts flag is on |
|
|
493 | # |
|
|
494 | # let's tell the administrator what to do next |
|
|
495 | |
|
|
496 | einfo |
|
|
497 | einfo "The 'vhosts' USE flag is switched ON" |
|
|
498 | einfo "This means that Portage will not automatically run webapp-config to" |
|
|
499 | einfo "complete the installation." |
|
|
500 | einfo |
|
|
501 | einfo "To install $PN-$PVR into a virtual host, run the following command:" |
|
|
502 | einfo |
|
|
503 | einfo " webapp-config -I -h <host> -d $PN $PN $PVR" |
|
|
504 | einfo |
|
|
505 | einfo "For more details, see the webapp-config(8) man page" |
| 386 | fi |
506 | fi |
| 387 | |
507 | |
| 388 | return 0 |
508 | return 0 |
| 389 | } |
509 | } |
|
|
510 | |
|
|
511 | function webapp_pkg_prerm () |
|
|
512 | { |
|
|
513 | # remove any virtual installs that there are |
|
|
514 | |
|
|
515 | local my_output |
|
|
516 | local x |
|
|
517 | |
|
|
518 | my_output="`webapp-config --list-installs $PN $PVR`" |
|
|
519 | |
|
|
520 | if [ "$?" != "0" ]; then |
|
|
521 | return |
|
|
522 | fi |
|
|
523 | |
|
|
524 | # the changes to IFS here are necessary to ensure that we can cope |
|
|
525 | # with directories that contain spaces in the file names |
|
|
526 | |
|
|
527 | # OLD_IFS="$IFS" |
|
|
528 | # IFS="
" |
|
|
529 | |
|
|
530 | for x in $my_output ; do |
|
|
531 | # IFS="$OLD_IFS" |
|
|
532 | |
|
|
533 | [ -f $x/.webapp ] && . $x/.webapp || ewarn "Cannot find file $x/.webapp" |
|
|
534 | |
|
|
535 | if [ -z "WEB_HOSTNAME" -o -z "WEB_INSTALLDIR" ]; then |
|
|
536 | ewarn "Don't forget to use webapp-config to remove the copy of" |
|
|
537 | ewarn "${PN}-${PVR} installed in" |
|
|
538 | ewarn |
|
|
539 | ewarn " $x" |
|
|
540 | ewarn |
|
|
541 | else |
|
|
542 | # we have enough information to remove the virtual copy ourself |
|
|
543 | |
|
|
544 | webapp-config -C -h ${WEB_HOSTNAME} -d ${WEB_INSTALLDIR} |
|
|
545 | |
|
|
546 | # if the removal fails - we carry on anyway! |
|
|
547 | fi |
|
|
548 | # IFS="
" |
|
|
549 | done |
|
|
550 | |
|
|
551 | # IFS="$OLD_IFS" |
|
|
552 | } |