ports/175561: [patch] [bsd.pkgng.mk] Enhancement to avoid pkgng "/bin/sh: Argument list too long"
Romain Tartiere
romain at FreeBSD.org
Fri Jan 25 14:40:00 UTC 2013
>Number: 175561
>Category: ports
>Synopsis: [patch] [bsd.pkgng.mk] Enhancement to avoid pkgng "/bin/sh: Argument list too long"
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Fri Jan 25 14:40:00 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator: Romain Tartiere
>Release: FreeBSD 9.1-STABLE amd64
>Organization:
>Environment:
System: FreeBSD marvin.blogreen.org 9.1-STABLE FreeBSD 9.1-STABLE #4 r245578: Fri Jan 18 00:14:39 CET 2013 root at marvin.blogreen.org:/usr/obj/usr/src/sys/MARVIN amd64
>Description:
When trying to register a port with many dependencies (2141 ports in my case)
using pkgng, it fails with error:
===> Registering installation for texlive-scheme-full-20110217,1
/bin/sh: Argument list too long
pkg: Invalid manifest format
*** [fake-pkg] Error code 74
Stop in /usr/ports/print/texlive-scheme-full.
The ${ACTUAL-PACKAGE-DEPENDS} generated snippet is too long and this result in
an invalid metadata file to be generated, thus making pkg fail a bit later.
In my case, ${_LIB_RUN_DEPENDS} is 204172 bytes long while the max commandline
length is 262144 bytes, there is therefore no much room for the rest of the
arguments. However, the " " argument passed to `pkg query` prevent it from
failing if ${_LIB_RUN_DEPENDS} where empty, so the test to "protect" it against
that is useless.
>How-To-Repeat:
One can get the TeXLive ports from
http://code.google.com/p/freebsd-texlive/
and try to install print/texlive-scheme-full with WITH_PKGNG=yes in
/etc/make.conf.
>Fix:
The following patch helps avoiding this situation.
--- bsd.pkgng.mk.diff begins here ---
--- bsd.pkgng.mk.orig 2013-01-25 14:59:31.000000000 +0100
+++ bsd.pkgng.mk 2013-01-25 15:17:32.000000000 +0100
@@ -21,10 +21,8 @@
PLIST_REINPLACE:= ${PLIST_REINPLACE:Nstopdaemon}
ACTUAL-PACKAGE-DEPENDS?= \
- if [ "${_LIB_RUN_DEPENDS}" != " " ]; then \
- ${PKG_QUERY} "%n: {origin: %o, version: \"%v\"}" " " ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,:C,${PORTSDIR}/,,} ; \
- ${PKG_QUERY} "%dn: {origin: %do, version: \"%dv\"}" " " ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,:C,${PORTSDIR}/,,} ; \
- fi
+ ${PKG_QUERY} "%n: {origin: %o, version: \"%v\"}" " " ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,:C,${PORTSDIR}/,,} ; \
+ ${PKG_QUERY} "%dn: {origin: %do, version: \"%dv\"}" " " ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,:C,${PORTSDIR}/,,}
.if !target(fake-pkg)
--- bsd.pkgng.mk.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list