bin/85261: [patch] nanobsd build breaks on pkg_add

Eugene Grosbein eugen at grosbein.pp.ru
Wed Aug 24 06:10:14 GMT 2005


>Number:         85261
>Category:       bin
>Synopsis:       [patch] nanobsd build breaks on pkg_add
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Aug 24 06:10:13 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Eugene Grosbein
>Release:        FreeBSD 6.0-BETA2 i386
>Organization:
Svyaz Service JSC
>Environment:
System: FreeBSD ws092.svzserv.kemerovo.su 6.0-BETA2 FreeBSD 6.0-BETA2 #0: Tue Aug 23 16:37:04 KRAST 2005 root at ws092.svzserv.kemerovo.su:/usr/obj/usr/src/sys/TEST i386

>Description:
	Nanobsd may be customized to include a set of packages.
	Packages should be placed in Pkg/ and nanobsd runs
	'pkg_add -v *' there.

	Assume there are two packages A and B and A depends on B.
	pkg_add adds A (and B as dependency) then it tries to add B
	and fails (B is already installed), so nanobsd fails to complete
	an image.

>How-To-Repeat:

	Try to build nanobsd with gettext-0.14.5.tbz and libiconv-1.9.2_1.tbz.
	pkg_add will try to install libiconv twice and fail.

>Fix:

	Introduce new command line switch -F for pkg_add to consider
	described case as nonfatal error and use 'pkg_add -vF'
	instead of 'pkg_add -v' in src/tools/tools/nanobsd/Customize/pkgs

	The following patch introduces -F. It is made for RELENG_6's
	src/usr.sbin/pkg_install/add

Index: add.h
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pkg_install/add/add.h,v
retrieving revision 1.11
diff -u -r1.11 add.h
--- add.h	29 Jun 2004 19:06:41 -0000	1.11
+++ add.h	24 Aug 2005 02:59:22 -0000
@@ -28,6 +28,7 @@
 extern char	*Prefix;
 extern Boolean	NoInstall;
 extern Boolean	NoRecord;
+extern Boolean	FailOnAlreadyInstalled;
 extern char	*Mode;
 extern char	*Owner;
 extern char	*Group;
Index: main.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pkg_install/add/main.c,v
retrieving revision 1.61.2.1
diff -u -r1.61.2.1 main.c
--- main.c	11 Jul 2005 16:14:21 -0000	1.61.2.1
+++ main.c	24 Aug 2005 02:59:38 -0000
@@ -27,13 +27,14 @@
 #include "lib.h"
 #include "add.h"
 
-static char Options[] = "hvIRfnrp:SMt:C:";
+static char Options[] = "hvIRfFnrp:SMt:C:";
 
 char	*Prefix		= NULL;
 char	*Chroot		= NULL;
 Boolean	NoInstall	= FALSE;
 Boolean	NoRecord	= FALSE;
 Boolean Remote		= FALSE;
+Boolean FailOnAlreadyInstalled = TRUE;
 
 char	*Mode		= NULL;
 char	*Owner		= NULL;
@@ -120,6 +121,10 @@
 
 	case 'f':
 	    Force = TRUE;
+	    break;
+
+	case 'F':
+	    FailOnAlreadyInstalled = FALSE;
 	    break;
 
 	case 'n':
Index: perform.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pkg_install/add/perform.c,v
retrieving revision 1.77
diff -u -r1.77 perform.c
--- perform.c	28 Jul 2004 16:03:13 -0000	1.77
+++ perform.c	24 Aug 2005 02:59:01 -0000
@@ -245,9 +245,12 @@
      */
     if ((isinstalledpkg(Plist.name) > 0 ||
          matchbyorigin(Plist.origin, NULL) != NULL) && !Force) {
-	warnx("package '%s' or its older version already installed",
-	      Plist.name);
-	code = 1;
+	warnx("package '%s' or its older version already installed%s",
+	      Plist.name, FailOnAlreadyInstalled ? "" : " (ignored)");
+	if(FailOnAlreadyInstalled)
+		code = 1;
+	else
+		code = 0;
 	goto success;	/* close enough for government work */
     }
 
Index: pkg_add.1
===================================================================
RCS file: /home/ncvs/src/usr.sbin/pkg_install/add/pkg_add.1,v
retrieving revision 1.66
diff -u -r1.66 pkg_add.1
--- pkg_add.1	13 Feb 2005 22:25:30 -0000	1.66
+++ pkg_add.1	24 Aug 2005 03:50:55 -0000
@@ -23,7 +23,7 @@
 .Nd a utility for installing software package distributions
 .Sh SYNOPSIS
 .Nm
-.Op Fl vInfrRMS
+.Op Fl vInfFrRMS
 .Op Fl t Ar template
 .Op Fl p Ar prefix
 .Op Fl C Ar chrootdir
@@ -104,6 +104,11 @@
 .Nm
 will still try to find and auto-install missing prerequisite packages,
 a failure to find one will not be fatal.
+.It Fl F
+Do not regard installation of already installed package as fatal error.
+This option allows
+.Cm pkg_add
+to complete without error when a package is already installed.
 .It Fl p Ar prefix
 Set
 .Ar prefix


Eugene Grosbein
>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list