bin/121542: [patch] teach `pkg_add' to accept PACKAGEROOT and
PACKAGESITE via command line
Denise H. G.
darcsis at gmail.com
Sun Mar 9 20:10:01 UTC 2008
>Number: 121542
>Category: bin
>Synopsis: [patch] teach `pkg_add' to accept PACKAGEROOT and PACKAGESITE via command line
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Sun Mar 09 20:10:00 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator: Denise H. G.
>Release: FreeBSD 7.0-STABLE amd64
>Organization:
>Environment:
System: FreeBSD pluton.xbsd.name 7.0-STABLE FreeBSD 7.0-STABLE #0: Fri Mar 7 14:53:14 CST 2008 dhg at pluton.xbsd.name:/opt/obj/usr/src/sys/mibsd-SMP-ULE amd64
>Description:
a possible answer to the PR: http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/113393
>How-To-Repeat:
>Fix:
--- patch.diff begins here ---
diff -ruN pkg_install.orig/add/main.c pkg_install/add/main.c
--- pkg_install.orig/add/main.c 2008-03-10 04:00:23.000000000 +0800
+++ pkg_install/add/main.c 2008-03-10 03:45:21.000000000 +0800
@@ -27,7 +27,7 @@
#include "lib.h"
#include "add.h"
-static char Options[] = "hvIRfFnrp:P:SMt:C:K";
+static char Options[] = "hvIRfFnrp:P:SMt:C:Kz:Z:";
char *Prefix = NULL;
Boolean PrefixRecursive = FALSE;
@@ -88,7 +88,7 @@
{ 0, 0, NULL }
};
-static char *getpackagesite(void);
+static char *getpackagesite(const char *, const char *);
int getosreldate(void);
static void usage __P((void));
@@ -99,6 +99,7 @@
int ch, error;
char **start;
char *cp, *packagesite = NULL, *remotepkg = NULL, *ptr;
+ char *pkg_site = NULL, *pkg_root = NULL;
static char temppackageroot[MAXPATHLEN];
static char pkgaddpath[MAXPATHLEN];
@@ -169,6 +170,14 @@
Chroot = optarg;
break;
+ case 'z':
+ pkg_root = optarg;
+ break;
+
+ case 'Z':
+ pkg_site = optarg;
+ break;
+
case 'h':
case '?':
default:
@@ -187,7 +196,7 @@
for (ch = 0; *argv; ch++, argv++) {
char temp[MAXPATHLEN];
if (Remote) {
- if ((packagesite = getpackagesite()) == NULL)
+ if ((packagesite = getpackagesite(pkg_root, pkg_site)) == NULL)
errx(1, "package name too long");
if (strlcpy(temppackageroot, packagesite,
sizeof(temppackageroot)) >= sizeof(temppackageroot))
@@ -271,12 +280,15 @@
}
static char *
-getpackagesite(void)
+getpackagesite(const char *pkg_root, const char *pkg_site)
{
int reldate, i;
static char sitepath[MAXPATHLEN];
struct utsname u;
+ if (pkg_site)
+ return pkg_site;
+
if (getenv("PACKAGESITE")) {
if (strlcpy(sitepath, getenv("PACKAGESITE"), sizeof(sitepath))
>= sizeof(sitepath))
@@ -284,7 +296,12 @@
return sitepath;
}
- if (getenv("PACKAGEROOT")) {
+ if (pkg_root) {
+ if (strlcpy(sitepath, pkg_root, sizeof(sitepath))
+ >= sizeof(sitepath))
+ return NULL;
+ } else {
+ if (getenv("PACKAGEROOT")) {
if (strlcpy(sitepath, getenv("PACKAGEROOT"), sizeof(sitepath))
>= sizeof(sitepath))
return NULL;
@@ -293,6 +310,7 @@
>= sizeof(sitepath))
return NULL;
}
+ }
if (strlcat(sitepath, "/pub/FreeBSD/ports/", sizeof(sitepath))
>= sizeof(sitepath))
@@ -324,6 +342,6 @@
{
fprintf(stderr, "%s\n%s\n",
"usage: pkg_add [-vInfFrRMSK] [-t template] [-p prefix] [-P prefix] [-C chrootdir]",
- " pkg-name [pkg-name ...]");
+ " [-z PACKAGEROOT] [-Z PACKAGESITE] pkg-name [pkg-name ...]");
exit(1);
}
diff -ruN pkg_install.orig/add/pkg_add.1 pkg_install/add/pkg_add.1
--- pkg_install.orig/add/pkg_add.1 2008-03-10 04:00:23.000000000 +0800
+++ pkg_install/add/pkg_add.1 2008-03-10 03:58:16.000000000 +0800
@@ -28,6 +28,8 @@
.Op Fl p Ar prefix
.Op Fl P Ar prefix
.Op Fl C Ar chrootdir
+.Op Fl z Ar PACKAGEROOT
+.Op Fl Z Ar PACKAGESITE
.Ar pkg-name Op Ar pkg-name ...
.Sh DESCRIPTION
The
@@ -245,6 +247,12 @@
may be run inside
.Ar chrootdir
as a side effect.
+.It Fl z Ar PACKAGEROOT
+Specify a URL to override the environmental variable PACKAGEROOT
+via command line.
+.It Fl Z Ar PACKAGESITE
+Specify a complete URL (including path) to override the environmental
+variable PACKAGESITE via command line.
.El
.Pp
One or more
--- patch.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list