Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 11 Dec 1998 19:21:56 -0500
From:      Rajesh Vaidheeswarran <rv@fore.com>
To:        jkh@FreeBSD.ORG
Cc:        rv@fore.com, freebsd-bugs@FreeBSD.ORG
Subject:   Re: bin/9005: new functionality patch.
Message-ID:  <199812120021.TAA03114@agastya.eng.fore.com>

next in thread | raw e-mail | index | archive | help
Hi Jordan:

I'm attaching a diff for the separation of the [de]installation scripts.

Let me know what you think.

rv
diff -cr /usr/src/usr.sbin/pkg_install/add/perform.c pkg_install/add/perform.c
*** /usr/src/usr.sbin/pkg_install/add/perform.c	Fri Sep 11 03:26:54 1998
--- pkg_install/add/perform.c	Fri Dec 11 17:34:06 1998
***************
*** 72,77 ****
--- 72,82 ----
      PackingList p;
      struct stat sb;
      int inPlace;
+     /* support for separate pre/post install scripts */
+     int new_m = 0;
+     char pre_script[FILENAME_MAX] = INSTALL_FNAME;
+     char post_script[FILENAME_MAX];
+     char pre_arg[FILENAME_MAX], post_arg[FILENAME_MAX];
  
      code = 0;
      zapLogDir = 0;
***************
*** 318,334 ****
  	}
      }
  
      /* If we're really installing, and have an installation file, run it */
!     if (!NoInstall && fexists(INSTALL_FNAME)) {
! 	vsystem("chmod +x %s", INSTALL_FNAME);	/* make sure */
  	if (Verbose)
! 	    printf("Running install with PRE-INSTALL for %s..\n", PkgName);
! 	if (!Fake && vsystem("./%s %s PRE-INSTALL", INSTALL_FNAME, PkgName)) {
  	    warnx("install script returned error status");
! 	    unlink(INSTALL_FNAME);
  	    code = 1;
  	    goto success;		/* nothing to uninstall yet */
  	}
      }
  
      /* Now finally extract the entire show if we're not going direct */
--- 323,357 ----
  	}
      }
  
+     /* Test whether to use the old method of passing tokens to installation
+      * scripts, and set appropriate variables..
+      */
+ 
+     if (fexists(POST_INSTALL_FNAME)) {
+ 	new_m = 1;
+ 	sprintf(post_script, "%s", POST_INSTALL_FNAME);
+ 	sprintf(pre_arg, "");
+ 	sprintf(post_arg, "");
+     } else {
+ 	if (fexists(INSTALL_FNAME)) {
+ 	    sprintf(post_script, "%s", INSTALL_FNAME);
+ 	    sprintf(pre_arg, "PRE-INSTALL");
+ 	    sprintf(post_arg, "POST-INSTALL");
+ 	}
+     }
+ 
      /* If we're really installing, and have an installation file, run it */
!     if (!NoInstall && fexists(pre_script)) {
! 	vsystem("chmod +x %s", pre_script);	/* make sure */
  	if (Verbose)
! 	    printf("Running pre-install for %s..\n", PkgName);
! 	if (!Fake && vsystem("./%s %s %s", pre_script, PkgName, pre_arg)) {
  	    warnx("install script returned error status");
! 	    unlink(pre_script);
  	    code = 1;
  	    goto success;		/* nothing to uninstall yet */
  	}
+ 	if (new_m) unlink(pre_script);
      }
  
      /* Now finally extract the entire show if we're not going direct */
***************
*** 349,364 ****
      }
  
      /* Run the installation script one last time? */
!     if (!NoInstall && fexists(INSTALL_FNAME)) {
  	if (Verbose)
! 	    printf("Running install with POST-INSTALL for %s..\n", PkgName);
! 	if (!Fake && vsystem("./%s %s POST-INSTALL", INSTALL_FNAME, PkgName)) {
  	    warnx("install script returned error status");
! 	    unlink(INSTALL_FNAME);
  	    code = 1;
  	    goto fail;
  	}
! 	unlink(INSTALL_FNAME);
      }
  
      /* Time to record the deed? */
--- 372,388 ----
      }
  
      /* Run the installation script one last time? */
!     if (!NoInstall && fexists(post_script)) {
! 	vsystem("chmod +x %s", post_script);	/* make sure */
  	if (Verbose)
! 	    printf("Running post-install for %s..\n", PkgName);
! 	if (!Fake && vsystem("./%s %s %s", post_script, PkgName, post_arg)) {
  	    warnx("install script returned error status");
! 	    unlink(post_script);
  	    code = 1;
  	    goto fail;
  	}
! 	unlink(post_script);
      }
  
      /* Time to record the deed? */
***************
*** 389,394 ****
--- 413,420 ----
  	vsystem("chmod a+rx %s", LogDir);
  	if (fexists(DEINSTALL_FNAME))
  	    move_file(".", DEINSTALL_FNAME, LogDir);
+ 	if (fexists(POST_DEINSTALL_FNAME))
+ 	    move_file(".", POST_DEINSTALL_FNAME, LogDir);
  	if (fexists(REQUIRE_FNAME))
  	    move_file(".", REQUIRE_FNAME, LogDir);
  	sprintf(contents, "%s/%s", LogDir, CONTENTS_FNAME);
diff -cr /usr/src/usr.sbin/pkg_install/add/pkg_add.1 pkg_install/add/pkg_add.1
*** /usr/src/usr.sbin/pkg_install/add/pkg_add.1	Tue Jul 14 04:27:58 1998
--- pkg_install/add/pkg_add.1	Fri Dec 11 19:07:23 1998
***************
*** 48,57 ****
  You are advised to verify the competence and identity of those who
  provide installable package files.  For extra protection, use the
  .Fl M
! flag to extract the package file, and inspect its contents and scripts
! to insure it poses no danger to your system's integrity.  Pay particular
! attention to any +INSTALL, +DEINSTALL, +REQUIRE or +MTREE_DIRS files,
! and inspect the +CONTENTS file for
  .Cm @cwd ,
  .Cm @mode 
  (check for setuid),
--- 48,57 ----
  You are advised to verify the competence and identity of those who
  provide installable package files.  For extra protection, use the
  .Fl M
! flag to extract the package file, and inspect its contents and scripts to
! insure it poses no danger to your system's integrity.  Pay particular
! attention to any +INSTALL, +POST-INSTALL, +DEINSTALL, +POST-DEINSTALL,
! +REQUIRE or +MTREE_DIRS files, and inspect the +CONTENTS file for
  .Cm @cwd ,
  .Cm @mode 
  (check for setuid),
***************
*** 78,84 ****
  .It Fl v
  Turn on verbose output.
  .It Fl I
! If an installation script exists for a given package, do not execute it.
  .It Fl n
  Don't actually install a package, just report the steps that
  would be taken if it was.
--- 78,85 ----
  .It Fl v
  Turn on verbose output.
  .It Fl I
! If a installation scripts (pre-install or post-install) exist for a given
! package, do not execute them.
  .It Fl n
  Don't actually install a package, just report the steps that
  would be taken if it was.
***************
*** 197,203 ****
  .Ef
  ftp.
  .Sh TECHNICAL DETAILS
! .Nm Pkg_add
  is fairly simple.  It extracts each package's "packing list"
  into a special staging directory, parses it,
  and then runs through the following sequence to fully extract the contents:
--- 198,204 ----
  .Ef
  ftp.
  .Sh TECHNICAL DETAILS
! .Nm pkg_add
  is fairly simple.  It extracts each package's "packing list"
  into a special staging directory, parses it,
  and then runs through the following sequence to fully extract the contents:
***************
*** 244,261 ****
  keyword denotes this as an installation requirements check (useful if
  you want to have one script serving multiple functions).
  .It
! If an
! .Ar install
! script exists for the package, it is then executed with the following arguments:
  .Bd -filled -offset indent -compact
  .Ar pkg-name
! .Ar PRE-INSTALL 
  .Ed
  where
  .Ar pkg-name
  is the name of the package in question and
  .Ar PRE-INSTALL
  is a keyword denoting this as the preinstallation phase.
  .It
  If
  .Cm @option extract-in-place
--- 245,276 ----
  keyword denotes this as an installation requirements check (useful if
  you want to have one script serving multiple functions).
  .It
! If a
! .Ar pre-install
! script exists for the package, it is then executed with the following
! arguments:
  .Bd -filled -offset indent -compact
+ .Cm script
  .Ar pkg-name
! .Ar PRE-INSTALL
  .Ed
+ 
  where
  .Ar pkg-name
  is the name of the package in question and
  .Ar PRE-INSTALL
  is a keyword denoting this as the preinstallation phase.
+ 
+ .Cm Note:
+ The
+ .Ar PRE-INSTALL
+ keyword will not appear if separate scripts for pre-install and post-install
+ are given during package creation time (using the
+ .Cm Fl i
+ and 
+ .Cm Fl I
+ flags to 
+ .Xr pkg_create 1 ).
  .It
  If
  .Cm @option extract-in-place
***************
*** 289,305 ****
  .Cm @cwd
  directive within this package.
  .It
! If an
! .Ar install
  script exists for the package, it is then executed as 
  .Bd -filled -offset indent -compact
  .Cm script
  .Ar pkg-name
  .Ar POST-INSTALL 
  .Ed
! This all allows you to write a single
  .Ar install
! script that does both ``before and after'' actions.
  .It
  After installation is complete, a copy of the packing list,
  .Ar deinstall
--- 304,342 ----
  .Cm @cwd
  directive within this package.
  .It
! If a
! .Ar post-install
  script exists for the package, it is then executed as 
  .Bd -filled -offset indent -compact
  .Cm script
  .Ar pkg-name
  .Ar POST-INSTALL 
  .Ed
! where
! .Ar pkg-name
! is the name of the package in question and
! .Ar POST-INSTALL
! is a keyword denoting this as the post-installation phase.
! 
! .Cm Note:
! The
! .Ar POST-INSTALL
! keyword will not appear if separate scripts for pre-install and post-install
! are given during package creation time (using the
! .Cm Fl i
! and 
! .Cm Fl I
! flags to 
! .Xr pkg_create 1 ).
! 
! Reasoning behind passing keywords such as
! .Ar POST-INSTALL
! and
! .Ar PRE-INSTALL
! is that this allows you to write a single
  .Ar install
! script that does both ``before and after'' actions. But, separating the
! functionality is more advantageous and easier from a maintainence viewpoint.
  .It
  After installation is complete, a copy of the packing list,
  .Ar deinstall
diff -cr /usr/src/usr.sbin/pkg_install/create/create.h pkg_install/create/create.h
*** /usr/src/usr.sbin/pkg_install/create/create.h	Wed Oct  8 03:46:19 1997
--- pkg_install/create/create.h	Fri Dec 11 17:25:19 1998
***************
*** 28,34 ****
--- 28,36 ----
  extern char	*Desc;
  extern char	*Display;
  extern char	*Install;
+ extern char	*PostInstall;
  extern char	*DeInstall;
+ extern char	*PostDeInstall;
  extern char	*Contents;
  extern char	*Require;
  extern char	*SrcDir;
diff -cr /usr/src/usr.sbin/pkg_install/create/main.c pkg_install/create/main.c
*** /usr/src/usr.sbin/pkg_install/create/main.c	Wed Oct  8 03:46:23 1997
--- pkg_install/create/main.c	Fri Dec 11 17:32:43 1998
***************
*** 18,24 ****
  #include "lib.h"
  #include "create.h"
  
! static char Options[] = "YNOhvf:p:P:c:d:i:k:r:t:X:D:m:s:";
  
  char	*Prefix		= NULL;
  char	*Comment        = NULL;
--- 18,24 ----
  #include "lib.h"
  #include "create.h"
  
! static char Options[] = "YNOhvf:p:P:c:d:i:I:k:K:r:t:X:D:m:s:";
  
  char	*Prefix		= NULL;
  char	*Comment        = NULL;
***************
*** 26,32 ****
--- 26,34 ----
  char	*SrcDir		= NULL;
  char	*Display	= NULL;
  char	*Install	= NULL;
+ char	*PostInstall	= NULL;
  char	*DeInstall	= NULL;
+ char	*PostDeInstall	= NULL;
  char	*Contents	= NULL;
  char	*Require	= NULL;
  char	*ExcludeFrom	= NULL;
***************
*** 87,96 ****
--- 89,106 ----
  	    Install = optarg;
  	    break;
  
+ 	case 'I':
+ 	    PostInstall = optarg;
+ 	    break;
+ 
  	case 'k':
  	    DeInstall = optarg;
  	    break;
  
+ 	case 'K':
+ 	    PostDeInstall = optarg;
+ 	    break;
+ 
  	case 'r':
  	    Require = optarg;
  	    break;
***************
*** 151,160 ****
  static void
  usage()
  {
!     fprintf(stderr, "%s\n%s\n%s\n%s\n",
  "usage: pkg_create [-YNOhv] [-P pkgs] [-p prefix] [-f contents] [-i iscript]",
! "                  [-k dscript] [-r rscript] [-t template] [-X excludefile]",
! "                  [-D displayfile] [-m mtreefile] -c comment -d description",
! "                  -f packlist pkg-name");
      exit(1);
  }
--- 161,171 ----
  static void
  usage()
  {
!     fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n",
  "usage: pkg_create [-YNOhv] [-P pkgs] [-p prefix] [-f contents] [-i iscript]",
! "                  [-I piscript] [-k dscript] [-K pdscript] [-r rscript] ",
! "                  [-t template] [-X excludefile] [-D displayfile] ",
! "                  [-m mtreefile] -c comment -d description -f packlist ",
! "                  pkg-name");
      exit(1);
  }
diff -cr /usr/src/usr.sbin/pkg_install/create/perform.c pkg_install/create/perform.c
*** /usr/src/usr.sbin/pkg_install/create/perform.c	Sun Dec  6 19:04:05 1998
--- pkg_install/create/perform.c	Fri Dec 11 16:48:45 1998
***************
*** 156,166 ****
--- 156,176 ----
  	add_plist(&plist, PLIST_IGNORE, NULL);
  	add_plist(&plist, PLIST_FILE, INSTALL_FNAME);
      }
+     if (PostInstall) {
+ 	copy_file(home, PostInstall, POST_INSTALL_FNAME);
+ 	add_plist(&plist, PLIST_IGNORE, NULL);
+ 	add_plist(&plist, PLIST_FILE, POST_INSTALL_FNAME);
+     }
      if (DeInstall) {
  	copy_file(home, DeInstall, DEINSTALL_FNAME);
  	add_plist(&plist, PLIST_IGNORE, NULL);
  	add_plist(&plist, PLIST_FILE, DEINSTALL_FNAME);
      }
+     if (PostDeInstall) {
+ 	copy_file(home, PostDeInstall, POST_DEINSTALL_FNAME);
+ 	add_plist(&plist, PLIST_IGNORE, NULL);
+ 	add_plist(&plist, PLIST_FILE, POST_DEINSTALL_FNAME);
+     }
      if (Require) {
  	copy_file(home, Require, REQUIRE_FNAME);
  	add_plist(&plist, PLIST_IGNORE, NULL);
***************
*** 270,277 ****
--- 280,291 ----
  
      if (Install)
  	fprintf(totar, "%s\n", INSTALL_FNAME);
+     if (PostInstall)
+ 	fprintf(totar, "%s\n", POST_INSTALL_FNAME);
      if (DeInstall)
  	fprintf(totar, "%s\n", DEINSTALL_FNAME);
+     if (PostDeInstall)
+ 	fprintf(totar, "%s\n", POST_DEINSTALL_FNAME);
      if (Require)
  	fprintf(totar, "%s\n", REQUIRE_FNAME);
      if (Display)
diff -cr /usr/src/usr.sbin/pkg_install/create/pkg_create.1 pkg_install/create/pkg_create.1
*** /usr/src/usr.sbin/pkg_install/create/pkg_create.1	Fri Jun 26 03:15:37 1998
--- pkg_install/create/pkg_create.1	Fri Dec 11 18:54:23 1998
***************
*** 36,42 ****
--- 36,44 ----
  .Op Fl p Ar prefix
  .Op Fl f Ar contents
  .Op Fl i Ar iscript
+ .Op Fl I Ar piscript
  .Op Fl k Ar dscript
+ .Op Fl K Ar pdscript
  .Op Fl r Ar rscript
  .Op Fl s Ar srcdir
  .Op Fl t Ar template
***************
*** 102,110 ****
  .It Fl i Ar iscript
  Set
  .Ar iscript
! to be the install procedure for the package.  This can be any
  executable program (or shell script).  It will be invoked automatically
! when the package is later installed.
  .It Fl P Ar pkgs
  Set the initial package dependency list to
  .Ar pkgs .
--- 104,131 ----
  .It Fl i Ar iscript
  Set
  .Ar iscript
! to be the pre-install procedure for the package.  This can be any executable
! program (or shell script).  It will be invoked automatically when the
! package is later installed. It will be passed the package's name as the
! first argument.
! 
! .Cm Note:
! if the
! .Cm Fl I
! option is not given, this script will serve as both the pre-install and the
! post-install script for the package, differentiating between the
! functionality by passing the keywords
! .Ar PRE-INSTALL
! and
! .Ar POST-INSTALL
! respectively, along with the package's name.
! .It Fl I Ar piscript
! Set
! .Ar piscript
! to be the post-install procedure for the package.  This can be any
  executable program (or shell script).  It will be invoked automatically
! when the package is later installed. It will be passed the package's name as
! the first argument.
  .It Fl P Ar pkgs
  Set the initial package dependency list to
  .Ar pkgs .
***************
*** 120,128 ****
  .It Fl k Ar dscript
  Set
  .Ar dscript
! to be the de-install procedure for the package.  This can be any
! executable program (or shell script).  It will be invoked automatically
! when the package is later (if ever) de-installed.
  .It Fl r Ar rscript
  Set
  .Ar rscript
--- 141,169 ----
  .It Fl k Ar dscript
  Set
  .Ar dscript
! to be the de-install procedure for the package.  This can be any executable
! program (or shell script).  It will be invoked automatically when the
! package is later (if ever) de-installed. It will be passed the package's
! name as the first argument.
! 
! .Cm Note:
! if the
! .Cm Fl K
! option is not given, this script will serve as both the de-install and the
! post-deinstall script for the package, differentiating between the
! functionality by passing the keywords
! .Ar DEINSTALL
! and
! .Ar POST-DEINSTALL
! respectively, along with the package's name.
! .It Fl K Ar pdscript
! Set
! .Ar pdscript
! to be the post-deinstall procedure for the package.  This can be any
! executable program (or shell script).  It will be invoked automatically when
! the package is later de-installed. It will be passed the package's name as
! the first argument.
! 
  .It Fl r Ar rscript
  Set
  .Ar rscript
diff -cr /usr/src/usr.sbin/pkg_install/delete/perform.c pkg_install/delete/perform.c
*** /usr/src/usr.sbin/pkg_install/delete/perform.c	Wed Nov 11 18:18:25 1998
--- pkg_install/delete/perform.c	Fri Dec 11 17:30:50 1998
***************
*** 54,59 ****
--- 54,64 ----
      PackingList p;
      char *tmp;
      int len;
+     /* support for separate pre/post install scripts */
+     int new_m = 0;
+     char pre_script[FILENAME_MAX] = DEINSTALL_FNAME;
+     char post_script[FILENAME_MAX];
+     char pre_arg[FILENAME_MAX], post_arg[FILENAME_MAX];
  
      if (!pkg || !(len = strlen(pkg)))
  	return 1;
***************
*** 66,83 ****
--- 71,92 ----
  
      sprintf(LogDir, "%s/%s", (tmp = getenv(PKG_DBDIR)) ? tmp : DEF_LOG_DIR,
      	    pkg);
+ 
      if (!fexists(LogDir)) {
  	warnx("no such package '%s' installed", pkg);
  	return 1;
      }
+ 
      if (!getcwd(home, FILENAME_MAX)) {
  	cleanup(0);
  	errx(2, "unable to get current working directory!");
      }
+ 
      if (chdir(LogDir) == FAIL) {
  	warnx("unable to change directory to %s! deinstall failed", LogDir);
  	return 1;
      }
+ 
      if (!isemptyfile(REQUIRED_BY_FNAME)) {
  	char buf[512];
  	warnx("package `%s' is required by these other packages\n"
***************
*** 93,115 ****
--- 102,130 ----
  	if (!Force)
  	    return 1;
      }
+ 
      sanity_check(LogDir);
      cfile = fopen(CONTENTS_FNAME, "r");
+ 
      if (!cfile) {
  	warnx("unable to open '%s' file", CONTENTS_FNAME);
  	return 1;
      }
+ 
      /* If we have a prefix, add it now */
      if (Prefix)
  	add_plist(&Plist, PLIST_CWD, Prefix);
      read_plist(&Plist, cfile);
      fclose(cfile);
      p = find_plist(&Plist, PLIST_CWD);
+ 
      if (!p) {
  	warnx("package '%s' doesn't have a prefix", pkg);
  	return 1;
      }
+ 
      setenv(PKG_PREFIX_VNAME, p->name, 1);
+ 
      if (fexists(REQUIRE_FNAME)) {
  	if (Verbose)
  	    printf("Executing 'require' script.\n");
***************
*** 121,154 ****
  		return 1;
  	}
      }
!     if (!NoDeInstall && fexists(DEINSTALL_FNAME)) {
  	if (Fake)
  	    printf("Would execute de-install script at this point.\n");
  	else {
! 	    vsystem("chmod +x %s", DEINSTALL_FNAME);	/* make sure */
! 	    if (vsystem("./%s %s DEINSTALL", DEINSTALL_FNAME, pkg)) {
  		warnx("deinstall script returned error status");
  		if (!Force)
  		    return 1;
  	    }
  	}
      }
      if (chdir(home) == FAIL) {
  	cleanup(0);
  	errx(2, "Toto! This doesn't look like Kansas anymore!");
      }
      if (!Fake) {
  	/* Some packages aren't packed right, so we need to just ignore delete_package()'s status.  Ugh! :-( */
  	if (delete_package(FALSE, CleanDirs, &Plist) == FAIL)
  	    warnx(
  	"couldn't entirely delete package (perhaps the packing list is\n"
  	"incorrectly specified?)");
  	if (vsystem("%s -r %s", REMOVE_CMD, LogDir)) {
  	    warnx("couldn't remove log entry in %s, deinstall failed", LogDir);
  	    if (!Force)
  		return 1;
  	}
      }
      for (p = Plist.head; p ; p = p->next) {
  	if (p->type != PLIST_PKGDEP)
  	    continue;
--- 136,216 ----
  		return 1;
  	}
      }
! 
!     /* Test whether to use the old method of passing tokens to deinstallation
!      * scripts, and set appropriate variables..
!      */
! 
!     if (fexists(POST_DEINSTALL_FNAME)) {
! 	new_m = 1;
! 	sprintf(post_script, "%s", POST_DEINSTALL_FNAME);
! 	sprintf(pre_arg, "");
! 	sprintf(post_arg, "");
!     } else {
! 	if (fexists(DEINSTALL_FNAME)) {
! 	    sprintf(post_script, "%s", DEINSTALL_FNAME);
! 	    sprintf(pre_arg, "DEINSTALL");
! 	    sprintf(post_arg, "POST-DEINSTALL");
! 	}
!     }
! 
!     if (!NoDeInstall && fexists(pre_script)) {
  	if (Fake)
  	    printf("Would execute de-install script at this point.\n");
  	else {
! 	    vsystem("chmod +x %s", pre_script);	/* make sure */
! 	    if (vsystem("./%s %s %s", pre_script, pkg, pre_arg)) {
  		warnx("deinstall script returned error status");
  		if (!Force)
  		    return 1;
  	    }
  	}
      }
+ 
      if (chdir(home) == FAIL) {
  	cleanup(0);
  	errx(2, "Toto! This doesn't look like Kansas anymore!");
      }
+ 
      if (!Fake) {
  	/* Some packages aren't packed right, so we need to just ignore delete_package()'s status.  Ugh! :-( */
  	if (delete_package(FALSE, CleanDirs, &Plist) == FAIL)
  	    warnx(
  	"couldn't entirely delete package (perhaps the packing list is\n"
  	"incorrectly specified?)");
+     }
+ 
+     if (chdir(LogDir) == FAIL) {
+  	warnx("unable to change directory to %s! deinstall failed", LogDir);
+  	return 1;
+     }
+ 
+     if (!NoDeInstall && fexists(post_script)) {
+  	if (Fake)
+  	    printf("Would execute post-deinstall script at this point.\n");
+  	else {
+  	    vsystem("chmod +x %s", post_script);	/* make sure */
+  	    if (vsystem("./%s %s %s", post_script, pkg, post_arg)) {
+  		warnx("post-deinstall script returned error status");
+  		if (!Force)
+  		    return 1;
+  	    }
+  	}
+     }
+ 
+     if (chdir(home) == FAIL) {
+  	cleanup(0);
+  	errx(2, "Toto! This doesn't look like Kansas anymore!");
+     }
+ 
+     if (!Fake) {
  	if (vsystem("%s -r %s", REMOVE_CMD, LogDir)) {
  	    warnx("couldn't remove log entry in %s, deinstall failed", LogDir);
  	    if (!Force)
  		return 1;
  	}
      }
+ 
      for (p = Plist.head; p ; p = p->next) {
  	if (p->type != PLIST_PKGDEP)
  	    continue;
diff -cr /usr/src/usr.sbin/pkg_install/delete/pkg_delete.1 pkg_install/delete/pkg_delete.1
*** /usr/src/usr.sbin/pkg_install/delete/pkg_delete.1	Mon Mar 23 03:27:25 1998
--- pkg_install/delete/pkg_delete.1	Fri Dec 11 19:16:50 1998
***************
*** 47,55 ****
  provide installable package files.  For extra protection, examine all
  the package control files in the package record directory (
  .Pa /var/db/pkg/<pkg-name>/ ).
! Pay particular
! attention to any +INSTALL, +DEINSTALL, +REQUIRE or +MTREE_DIRS files,
! and inspect the +CONTENTS file for
  .Cm @cwd ,
  .Cm @mode 
  (check for setuid),
--- 47,55 ----
  provide installable package files.  For extra protection, examine all
  the package control files in the package record directory (
  .Pa /var/db/pkg/<pkg-name>/ ).
! Pay particular attention to any +INSTALL, +POST-INSTALL, +DEINSTALL,
! +POST-DEINSTALL, +REQUIRE or +MTREE_DIRS files, and inspect the +CONTENTS
! file for
  .Cm @cwd ,
  .Cm @mode 
  (check for setuid),
***************
*** 97,103 ****
  
  .Pp
  .Sh TECHNICAL DETAILS
! .Nm Pkg_delete
  does pretty much what it says.  It examines installed package records in 
  .Pa /var/db/pkg/<pkg-name> ,
  deletes the package contents, and finally removes the package records.
--- 97,103 ----
  
  .Pp
  .Sh TECHNICAL DETAILS
! .Nm pkg_delete
  does pretty much what it says.  It examines installed package records in 
  .Pa /var/db/pkg/<pkg-name> ,
  deletes the package contents, and finally removes the package records.
***************
*** 140,153 ****
  .Nm deinstall
  script is called as:
  .Bd -filled -offset indent -compact
! .Cm deinstall
  .Ar <pkg-name>
  .Ar DEINSTALL
  .Ed
! Passing the keyword
  .Ar DEINSTALL
! lets you potentially write only one program/script that handles all
! aspects of installation and deletion.
  .Pp
  All scripts are called with the environment variable
  .Ev PKG_PREFIX
--- 140,210 ----
  .Nm deinstall
  script is called as:
  .Bd -filled -offset indent -compact
! .Cm script
  .Ar <pkg-name>
  .Ar DEINSTALL
  .Ed
! where
! .Ar pkg-name
! is the name of the package in question and
! .Ar DEINSTALL
! is a keyword denoting this as the pre-deinstallation phase.
! 
! .Cm Note:
! The
! .Ar DEINSTALL
! keyword will not appear if separate scripts for deinstall and post-deinstall
! are given during package creation time (using the
! .Cm Fl k
! and 
! .Cm Fl K
! flags to 
! .Xr pkg_create 1 ).
! .Pp
! If a
! .Cm post-deinstall
! script exists for the package, it is executed
! .Cm after
! all files are removed.  It is this script's responsibility to clean up any
! additional messy details around the package's installation, and leave the
! system (hopefully) in the same state that it was prior to the installation
! of the package.
! 
! The
! .Nm post-deinstall
! script is called as:
! .Bd -filled -offset indent -compact
! .Cm script
! .Ar <pkg-name>
! .Ar POST-DEINSTALL
! .Ed
! where
! .Ar pkg-name
! is the name of the package in question and
! .Ar POST-DEINSTALL
! is a keyword denoting this as the post-deinstallation phase.
! 
! .Cm Note:
! The
! .Ar POST-DEINSTALL
! keyword will not appear if separate scripts for deinstall and post-deinstall
! are given during package creation time (using the
! .Cm Fl k
! and 
! .Cm Fl K
! flags to 
! .Xr pkg_create 1 ).
! 
! Reasoning behind passing keywords such as
  .Ar DEINSTALL
! and
! .Ar POST-DEINSTALL
! is that it lets you potentially write only one program/script that handles
! all aspects of installation and deletion.
! 
! But experience has proved that this is a lot more difficult to maintain and
! is not as advantageous as having separate scripts that handle each aspect of
! installation and deinstallation.
  .Pp
  All scripts are called with the environment variable
  .Ev PKG_PREFIX
diff -cr /usr/src/usr.sbin/pkg_install/info/perform.c pkg_install/info/perform.c
*** /usr/src/usr.sbin/pkg_install/info/perform.c	Fri Sep 11 03:26:58 1998
--- pkg_install/info/perform.c	Fri Dec 11 17:18:56 1998
***************
*** 179,186 ****
--- 179,190 ----
  	    show_plist("Packing list:\n", &plist, (plist_t)-1);
  	if ((Flags & SHOW_INSTALL) && fexists(INSTALL_FNAME))
  	    show_file("Install script:\n", INSTALL_FNAME);
+ 	if ((Flags & SHOW_INSTALL) && fexists(POST_INSTALL_FNAME))
+ 	    show_file("Post-Install script:\n", POST_INSTALL_FNAME);
  	if ((Flags & SHOW_DEINSTALL) && fexists(DEINSTALL_FNAME))
  	    show_file("De-Install script:\n", DEINSTALL_FNAME);
+ 	if ((Flags & SHOW_DEINSTALL) && fexists(POST_DEINSTALL_FNAME))
+ 	    show_file("Post-DeInstall script:\n", POST_DEINSTALL_FNAME);
  	if ((Flags & SHOW_MTREE) && fexists(MTREE_FNAME))
  	    show_file("mtree file:\n", MTREE_FNAME);
  	if (Flags & SHOW_PREFIX)
diff -cr /usr/src/usr.sbin/pkg_install/lib/lib.h pkg_install/lib/lib.h
*** /usr/src/usr.sbin/pkg_install/lib/lib.h	Mon Feb 16 12:16:47 1998
--- pkg_install/lib/lib.h	Fri Dec 11 16:46:22 1998
***************
*** 66,72 ****
--- 66,74 ----
  #define COMMENT_FNAME		"+COMMENT"
  #define DESC_FNAME		"+DESC"
  #define INSTALL_FNAME		"+INSTALL"
+ #define POST_INSTALL_FNAME	"+POST-INSTALL"
  #define DEINSTALL_FNAME		"+DEINSTALL"
+ #define POST_DEINSTALL_FNAME	"+POST-DEINSTALL"
  #define REQUIRE_FNAME		"+REQUIRE"
  #define REQUIRED_BY_FNAME	"+REQUIRED_BY"
  #define DISPLAY_FNAME		"+DISPLAY"

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199812120021.TAA03114>