/[gentoo-x86]/eclass/webapp.eclass
Gentoo

Diff of /eclass/webapp.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.17 Revision 1.20
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.20 2004/05/22 18:56:58 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
19ECLASS=webapp 22ECLASS=webapp
20INHERITED="$INHERITED $ECLASS" 23INHERITED="$INHERITED $ECLASS"
21SLOT="${PVR}" 24SLOT="${PVR}"
22IUSE="$IUSE vhosts" 25IUSE="$IUSE vhosts"
23DEPEND="$DEPEND >=net-www/webapp-config-1.8" 26DEPEND="$DEPEND >=net-www/webapp-config-1.7 app-portage/gentoolkit"
24 27
25EXPORT_FUNCTIONS pkg_postinst pkg_setup src_install 28EXPORT_FUNCTIONS pkg_postinst pkg_setup src_install pkg_prerm
26 29
27INSTALL_DIR="/$PN" 30INSTALL_DIR="/$PN"
28IS_UPGRADE=0 31IS_UPGRADE=0
29IS_REPLACE=0 32IS_REPLACE=0
33
34INSTALL_CHECK_FILE="installed_by_webapp_eclass"
30 35
31# ------------------------------------------------------------------------ 36# ------------------------------------------------------------------------
32# INTERNAL FUNCTION - USED BY THIS ECLASS ONLY 37# INTERNAL FUNCTION - USED BY THIS ECLASS ONLY
33# 38#
34# Check whether a specified file exists within the image/ directory 39# Check whether a specified file exists within the image/ directory
121} 126}
122 127
123# ------------------------------------------------------------------------ 128# ------------------------------------------------------------------------
124# EXPORTED FUNCTION - FOR USE IN EBUILDS 129# EXPORTED FUNCTION - FOR USE IN EBUILDS
125# 130#
131# Install a script that will run after a virtual copy is created, and
132# before a virtual copy has been removed
133#
134# @param $1 - the script to run
135# ------------------------------------------------------------------------
136
137function webapp_hook_script ()
138{
139 webapp_checkfileexists "$2"
140
141 einfo "(hook) $1"
142 cp "$1" "${D}${MY_HOOKSCRIPTSDIR}/`basename $1`" || die "Unable to install $1 into ${D}${MY_HOOKSCRIPTSDIR}/"
143 chmod 555 "${D}${MY_HOOKSCRIPTSDIR}/`basename $1`"
144}
145
146# ------------------------------------------------------------------------
147# EXPORTED FUNCTION - FOR USE IN EBUILDS
148#
126# Install a text file containing post-installation instructions. 149# Install a text file containing post-installation instructions.
127# 150#
128# @param $1 - language code (use 'en' for now) 151# @param $1 - language code (use 'en' for now)
129# @param $2 - the file to install 152# @param $2 - the file to install
130# ------------------------------------------------------------------------ 153# ------------------------------------------------------------------------
183} 206}
184 207
185# ------------------------------------------------------------------------ 208# ------------------------------------------------------------------------
186# EXPORTED FUNCTION - FOR USE IN EBUILDS 209# EXPORTED FUNCTION - FOR USE IN EBUILDS
187# 210#
211# @param $1 - the webserver to install the config file for
212# (one of apache1, apache2, cherokee)
213# @param $2 - the config file to install
214# @param $3 - new name for the config file (default is `basename $2`)
215# this is an optional parameter
216#
217# NOTE:
218# this function will automagically prepend $1 to the front of your
219# config file's name
220# ------------------------------------------------------------------------
221
222function webapp_server_config ()
223{
224 webapp_checkfileexists "$2"
225
226 # sort out what the name will be of the config file
227
228 local my_file
229
230 if [ -z "$3" ]; then
231 $my_file="$1-`basename $2`"
232 else
233 $my_file="$1-$3"
234 fi
235
236 # warning:
237 #
238 # do NOT change the naming convention used here without changing all
239 # the other scripts that also rely upon these names
240
241 einfo "($1) config file '$my_file'"
242 cp "$2" "${D}${MY_SERVERCONFIGDIR}/${my_file}"
243}
244
245# ------------------------------------------------------------------------
246# EXPORTED FUNCTION - FOR USE IN EBUILDS
188# 247#
189# @param $1 - the db engine that the script is for 248# @param $1 - the db engine that the script is for
190# (one of: mysql|postgres) 249# (one of: mysql|postgres)
191# @param $2 - the sql script to be installed 250# @param $2 - the sql script to be installed
192# @param $3 - the older version of the app that this db script 251# @param $3 - the older version of the app that this db script
234# the final version! 293# the final version!
235# ------------------------------------------------------------------------ 294# ------------------------------------------------------------------------
236 295
237function webapp_src_install () 296function webapp_src_install ()
238{ 297{
239 chown -R root:root ${D}/ 298 chown -R ${VHOST_DEFAULT_UID}:${VHOST_DEFAULT_GID} ${D}/
240 chmod -R u-s ${D}/ 299 chmod -R u-s ${D}/
241 chmod -R g-s ${D}/ 300 chmod -R g-s ${D}/
242 301
243 keepdir ${MY_PERSISTDIR} 302 keepdir ${MY_PERSISTDIR}
244 fowners root:root ${MY_PERSISTDIR} 303 fowners root:root ${MY_PERSISTDIR}
245 fperms 755 ${MY_PERSISTDIR} 304 fperms 755 ${MY_PERSISTDIR}
246 305
247 HAS_webapp_src_install=1 306 # to test whether or not the ebuild has correctly called this function
307 # we add an empty file to the filesystem
308 #
309 # we used to just set a variable in the shell script, but we can
310 # no longer rely on Portage calling both webapp_src_install() and
311 # webapp_pkg_postinst() within the same shell process
312
313 touch ${D}/${MY_APPDIR}/${INSTALL_CHECK_FILE}
248} 314}
249 315
250# ------------------------------------------------------------------------ 316# ------------------------------------------------------------------------
251# EXPORTED FUNCTION - call from inside your ebuild's pkg_config AFTER 317# EXPORTED FUNCTION - call from inside your ebuild's pkg_config AFTER
252# everything else has run 318# everything else has run
263 die "ebuild sets SLOT, overrides webapp.eclass" 329 die "ebuild sets SLOT, overrides webapp.eclass"
264 fi 330 fi
265 331
266 # pull in the shared configuration file 332 # pull in the shared configuration file
267 333
334 G_HOSTNAME="localhost"
268 . /etc/vhosts/webapp-config || die "Unable to open /etc/vhosts/webapp-config file" 335 . /etc/vhosts/webapp-config || die "Unable to open /etc/vhosts/webapp-config file"
269}
270 336
271function webapp_getinstalltype () 337 # are we installing a webapp-config solution over the top of a
338 # non-webapp-config solution?
339
340 if ! use vhosts ; then
341 local my_dir="$VHOST_ROOT/$MY_HTDOCSBASE/$PN"
342 local my_output
343
344 if [ -d "$my_dir" ] ; then
345 einfo "You already have something installed in $my_dir"
346 einfo "Are you trying to install over the top of something I cannot upgrade?"
347
348 my_output="`webapp_check_installedat`"
349
350 if [ "$?" != "0" ]; then
351
352 # okay, whatever is there, it isn't webapp-config-compatible
353 ewarn
354 ewarn "Whatever is in $my_dir, it's not"
355 ewarn "compatible with webapp-config."
356 ewarn
357 ewarn "This ebuild may be overwriting important files."
358 ewarn
359 elif [ "`echo $my_output | awk '{ print $1 }'`" != "$PN" ]; then
360 eerror "$my_dir contains $my_output"
361 eerror "I cannot upgrade that"
362 die "Cannot upgrade contents of $my_dir"
363 else
364 einfo
365 einfo "I can upgrade the contents of $my_dir"
366 einfo
367 fi
368 fi
369 fi
370}
371
372function webapp_someunusedfunction ()
272{ 373{
273 # are we emerging something that is already installed? 374 # are we emerging something that is already installed?
274 375
275 if [ -d "${D}${MY_APPROOT}/${MY_APPSUFFIX}" ]; then 376 if [ -d "${D}${MY_APPROOT}/${MY_APPSUFFIX}" ]; then
276 # yes we are 377 # yes we are
277 ewarn "Removing existing copy of ${PN}-${PVR}" 378 ewarn "Removing existing copy of ${PN}-${PVR}"
278 rm -rf "${D}${MY_APPROOT}/${MY_APPSUFFIX}" 379 rm -rf "${D}${MY_APPROOT}/${MY_APPSUFFIX}"
279 fi 380 fi
381}
280 382
383function webapp_getinstalltype ()
384{
281 # or are we upgrading? 385 # or are we upgrading?
282 386
283 if ! use vhosts ; then 387 if ! use vhosts ; then
284 # we only run webapp-config if vhosts USE flag is not set 388 # we only run webapp-config if vhosts USE flag is not set
285 389
303 IS_UPGRADE=1 407 IS_UPGRADE=1
304 else 408 else
305 einfo "This is a re-installation" 409 einfo "This is a re-installation"
306 IS_REPLACE=1 410 IS_REPLACE=1
307 fi 411 fi
412 else
413 einfo "$my_ouptut is installed there"
308 fi 414 fi
415 else
416 einfo "This is an installation"
309 fi 417 fi
310 fi 418 fi
311} 419}
312 420
313function webapp_src_preinst () 421function webapp_src_preinst ()
324 432
325function webapp_pkg_postinst () 433function webapp_pkg_postinst ()
326{ 434{
327 # sanity checks, to catch bugs in the ebuild 435 # sanity checks, to catch bugs in the ebuild
328 436
329 if [ "$HAS_webapp_src_install+" == "+" ]; then 437 if [ ! -f ${MY_APPDIR}/${INSTALL_CHECK_FILE} ]; then
330 eerror 438 eerror
331 eerror "This ebuild did not call webapp_src_install() at the end" 439 eerror "This ebuild did not call webapp_src_install() at the end"
332 eerror "of the src_install() function" 440 eerror "of the src_install() function"
333 eerror 441 eerror
334 eerror "Please log a bug on http://bugs.gentoo.org" 442 eerror "Please log a bug on http://bugs.gentoo.org"
379 # the user is relying on portage to do the magical thing for it 487 # the user is relying on portage to do the magical thing for it
380 488
381 if [ "$IS_UPGRADE" = "1" ] ; then 489 if [ "$IS_UPGRADE" = "1" ] ; then
382 einfo "Removing old version $REMOVE_PKG" 490 einfo "Removing old version $REMOVE_PKG"
383 491
384 echo emerge -C $CATEGORY/$REMOVE_PKG 492 emerge -C $CATEGORY/$REMOVE_PKG
385 fi 493 fi
494 else
495 # vhosts flag is on
496 #
497 # let's tell the administrator what to do next
498
499 einfo
500 einfo "The 'vhosts' USE flag is switched ON"
501 einfo "This means that Portage will not automatically run webapp-config to"
502 einfo "complete the installation."
503 einfo
504 einfo "To install $PN-$PVR into a virtual host, run the following command:"
505 einfo
506 einfo " webapp-config -I -h <host> -d $PN $PN $PVR"
507 einfo
508 einfo "For more details, see the webapp-config(8) man page"
386 fi 509 fi
387 510
388 return 0 511 return 0
389} 512}
513
514function webapp_pkg_prerm ()
515{
516 # remove any virtual installs that there are
517
518 local my_output
519 local x
520
521 my_output="`webapp-config --list-installs $PN $PVR`"
522
523 if [ "$?" != "0" ]; then
524 return
525 fi
526
527 # the changes to IFS here are necessary to ensure that we can cope
528 # with directories that contain spaces in the file names
529
530 # OLD_IFS="$IFS"
531 # IFS=" "
532
533 for x in $my_output ; do
534 # IFS="$OLD_IFS"
535
536 [ -f $x/.webapp ] && . $x/.webapp || ewarn "Cannot find file $x/.webapp"
537
538 if [ -z "WEB_HOSTNAME" -o -z "WEB_INSTALLDIR" ]; then
539 ewarn "Don't forget to use webapp-config to remove the copy of"
540 ewarn "${PN}-${PVR} installed in"
541 ewarn
542 ewarn " $x"
543 ewarn
544 else
545 # we have enough information to remove the virtual copy ourself
546
547 webapp-config -C -h ${WEB_HOSTNAME} -d ${WEB_INSTALLDIR}
548
549 # if the removal fails - we carry on anyway!
550 fi
551 # IFS=" "
552 done
553
554 # IFS="$OLD_IFS"
555}

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.20

  ViewVC Help
Powered by ViewVC 1.1.20