#! /bin/bash #========================================================================== # Execute any hooks required for this segment # # Title: pbuilder-runhooks # Description User hooks for pbuilder package # Programmed by: Dale Amon # Date: $Date$ # Version: $Revision$ # # $HOOKDIR is set in /etc/pbuilderrc and contains a list of executable # programs or scripts. The type is only limited by what you expect will # be available in your chrooted environment after debootstrap has done # an initial install. The functions muxt be named in the format: # . Currently only X is defined; # scripts prefixed with X will be run just before the chroot environment # is exited and the base.tgz file is created or updated. # # HISTORY: # $Log$ # Revision 1.17 2003/12/10 23:18:48 dancer # + # + * debuild-pbuilder.1: fix document formatting error, from Roland Stigge. # + # + * pbuilder-runhooks (hooks): Try and detect file name non-matching case # + for hooks, from Dale Amon. # # Revision 1.16 2003/11/16 07:08:54 dancer # + * THANKS: add # + # + * pbuilder-runhooks: fix warning messages to be more correct, thanks # + to Daniel Martin. # + # # Revision 1.15 2003/03/10 10:02:11 dancer # +2003-03-10 Junichi Uekawa # + # + * pbuilder-satisfydepends: quote some strings... trying to be pedantic # + # + * pbuilder-buildpackage-funcs: unset LOGNAME for when building with # + real root privilage. # + thanks Barak Pearlmutter # + # + * pbuilder.8: document X hooks which were previously undocumented. # + # + * pbuilder-user-mode-linux (BUILDING_DSC_FILE): use readlink on real existing files. # + GNU "readlink -f " exits with an exit code of 1 when the file does not # + exist, debianutils readlink did not. # + # + * pbuilder-runhooks (hooks): do not call readlink here, # + since the file may not exist. # + # + * pbuilder-checkparams (USE_PKGNAME_LOGFILE): use readlink on real existing files. # + # + * pbuilder-buildpackage (PACKAGENAME): use readlink on real existing files. # + # # Revision 1.14 2002/09/25 08:55:44 dancer # + * pbuilder-runhooks (hooks): do not error out if there are no hooks in the hookdir. # # Revision 1.13 2002/02/24 12:06:55 dancer # release is ready, I've checked. # # Revision 1.12 2002/02/24 07:57:06 dancer # added hooks support for pbuilder build target. # # Revision 1.11 2001/10/21 05:03:21 dancer # fixing bugs related to runhooks, reported by Dale. Some serious logic disorder seems to be. # # Revision 1.10 2001/10/12 16:56:41 dancer # changing the error message to warning, because these messages do not stop execution # # Revision 1.9 2001/10/12 16:31:18 dancer # fixed my logical disorder. # # Revision 1.8 2001/10/12 15:54:32 dancer # diff # # Revision 1.7 2001/09/27 11:04:54 dancer # removing comment # # Revision 1.6 2001/09/27 11:03:56 dancer # removing pushd and popd. # # Revision 1.5 2001/09/27 09:16:34 dancer # fixing some serious typos . # # Revision 1.4 2001/09/27 08:20:58 dancer # changing little bits to my liking, and hopefully removing any potentially dangerous bits. # # Revision 1.3 2001/09/27 07:13:04 dancer # and even more reindentation. # # Revision 1.2 2001/09/27 07:12:51 dancer # reindent etc. # # Revision 1.1 2001/09/27 07:10:47 dancer # new file from dale amon. # # 20010925 Dale Amon # Created. # Thanks to Jens Ruehmkorf # # for discussions and ideas. # # TODO: * Are there any other executable backup types we should # filtered besides *~ and *.bak? # #========================================================================== hooks=tmp/hooks #========================================================================== # Set up fresh chroot'd hooks tmp script directory # function loadhooks () { if [ -z "$HOOKDIR" ]; then return ; fi if [ -d "$BUILDPLACE/$hooks" ]; then rm -rf "$BUILDPLACE/$hooks" fi if [ -d "$HOOKDIR" ]; then mkdir -p "$BUILDPLACE/$hooks" if ! cp -a "$HOOKDIR/"* "$BUILDPLACE/$hooks"; then echo "W: no hooks found on the hookdir" fi fi } #-------------------------------------------------------------------------- # Tidy up after ourselves. (Anything we leave behind ends up in base.tgz) # function unloadhooks () { if [ -z "$HOOKDIR" ]; then return ; fi if [ -d "$BUILDPLACE/$hooks" ]; then rm -rf "$BUILDPLACE/$hooks" else echo "E: Logic failure." fi } #-------------------------------------------------------------------------- # Execute every script found in the chroot'd target directory. We only # test for whether a file is executable because we have no idea what # the user had put in their dist. If they want PL/1 and ADA on the base # dist or have decided to use emacslisp for everything, it's their # problem. # # Args: Required prefix on hook fn name # Returns: none # function executehooks () { local prefix="$1" if [ -z "$HOOKDIR" ]; then return ; fi for fn in "$BUILDPLACE/$hooks/$prefix"[0-9][0-9]* ; do case "$fn" in "$BUILDPLACE/$hooks/$prefix"'[0-9][0-9]*') echo "W: no hooks of type ${prefix} found -- ignoring" ;; *~) echo "W: skipping an editor backup file $fn" ;; *.bak) echo "W: skipping a backup file $fn" ;; *) if [ -x "$fn" ]; then $CHROOTEXEC "$hooks/"$(basename "$fn") echo " -> user script $fn finished" else if [ -f "$fn" ]; then filetype=$(basename "$fn" ) echo "W: execute priv not set on file $filetype, not executing." else # Should it reach here ? This case should be caught in the above case. echo "W: no hooks of type ${prefix} found -- internal error in logic" fi fi ;; esac done } #--------------------------------------------------------------------------