Bug 182332 - www/trac: installs packed eggs which makes them unusable for running services
Summary: www/trac: installs packed eggs which makes them unusable for running services
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: Normal Affects Only Me
Assignee: Cheng-Lung Sung
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-09-23 21:50 UTC by Volodymyr Kostyrko
Modified: 2014-02-08 20:10 UTC (History)
0 users

See Also:


Attachments
trac-distutils.diff (7.71 KB, patch)
2014-01-26 21:56 UTC, R.Mahmatkhanov
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Volodymyr Kostyrko 2013-09-23 21:50:00 UTC
Most services and daemon when started have no privileges over local file system while packed egg file should be unpacked somewhere before use.

Anyway egg is a distribution format, while we are using packages with ports we don't need to stick to eggs.

Possible errors would be:

Traceback (most recent call last):
  File "build/bdist.freebsd-9.1-RELEASE-p1-amd64/egg/trac/web/api.py", line 514, in send_error
    data, 'text/html')
  File "build/bdist.freebsd-9.1-RELEASE-p1-amd64/egg/trac/web/chrome.py", line 975, in render_template
    template = self.load_template(filename, method=method)
  File "build/bdist.freebsd-9.1-RELEASE-p1-amd64/egg/trac/web/chrome.py", line 933, in load_template
    self.get_all_templates_dirs(), auto_reload=self.auto_reload,
  File "build/bdist.freebsd-9.1-RELEASE-p1-amd64/egg/trac/web/chrome.py", line 649, in get_all_templates_dirs
    dirs.extend(provider.get_templates_dirs() or [])
  File "build/bdist.freebsd-9.1-RELEASE-p1-amd64/egg/trac/web/chrome.py", line 627, in get_templates_dirs
    pkg_resources.resource_filename('trac', 'templates'),
  File "build/bdist.freebsd-9.1-RELEASE-p1-amd64/egg/pkg_resources.py", line 914, in resource_filename
    self, resource_name
  File "build/bdist.freebsd-9.1-RELEASE-p1-amd64/egg/pkg_resources.py", line 1393, in get_resource_filename
    return self._extract_resource(manager, zip_path)
  File "build/bdist.freebsd-9.1-RELEASE-p1-amd64/egg/pkg_resources.py", line 1400, in _extract_resource
    manager, os.path.join(zip_path, name)
  File "build/bdist.freebsd-9.1-RELEASE-p1-amd64/egg/pkg_resources.py", line 1418, in _extract_resource
    self.egg_name, self._parts(zip_path)
  File "build/bdist.freebsd-9.1-RELEASE-p1-amd64/egg/pkg_resources.py", line 994, in get_cache_path
    self.extraction_error()
  File "build/bdist.freebsd-9.1-RELEASE-p1-amd64/egg/pkg_resources.py", line 960, in extraction_error
    raise err
ExtractionError: Can't extract file(s) to egg cache

The following error occurred while trying to extract file(s) to the Python egg
cache:

  [Errno 13] Permission denied: '/.python-eggs'

The Python egg cache directory is currently set to:

  /.python-eggs

Perhaps your account does not have write access to this directory?  You can
change the cache directory by setting the PYTHON_EGG_CACHE environment
variable to point to an accessible directory.
Comment 1 Mark Linimon freebsd_committer freebsd_triage 2013-09-29 22:47:48 UTC
Responsible Changed
From-To: freebsd-ports-bugs->freebsd-python

Over to maintainer(s).
Comment 2 koobs 2013-10-23 05:23:04 UTC
Hi Volodymyr,

While it is a desirable (and planned) long-terms goal to have consistent
behaviour in the ports tree, there is not *yet* a formal or specific
documented policy regarding Python module packaging in FreeBSD.

A number of maintainers *do* however, make changes to upstream modules
by explicitly setting zip_safe=False in setup.py, or overriding the use
of setuptools with plain-old distutils, resulting in the module being
installed uncompressed.

For those modules or ports that *dont* currently do this such as
www/trac, the end-user *can* use the PYTHON_EGG_CACHE environment
variable that points to a writable area of the filesystem to address the
behaviour.

In short, I recommend that this PR be changed, assigning it to the
maintainer of the www/trac port for follow-up and resolution.
Comment 3 Kubilay Kocak freebsd_committer freebsd_triage 2013-10-23 05:39:43 UTC
Class Changed
From-To: sw-bug->change-request

Port packaging change-request, not a software bug
Comment 4 Kubilay Kocak freebsd_committer freebsd_triage 2013-10-23 05:55:23 UTC
Responsible Changed
From-To: freebsd-python->clsung

Fix synposis (category) and reassign to maintaner
Comment 5 Volodymyr Kostyrko 2013-10-23 15:09:56 UTC
23.10.2013 07:23, Kubilay Kocak wrote:
> Hi Volodymyr,
>
> While it is a desirable (and planned) long-terms goal to have consistent
> behaviour in the ports tree, there is not *yet* a formal or specific
> documented policy regarding Python module packaging in FreeBSD.

And that's bad.

> A number of maintainers *do* however, make changes to upstream modules
> by explicitly setting zip_safe=False in setup.py, or overriding the use
> of setuptools with plain-old distutils, resulting in the module being
> installed uncompressed.

Or like me overriding the way egg is installed to uncompress it.

> For those modules or ports that *dont* currently do this such as
> www/trac, the end-user *can* use the PYTHON_EGG_CACHE environment
> variable that points to a writable area of the filesystem to address the
> behaviour.

While this is possibly true for www/trac this can be not so funny for 
some other modules that are actually used in restricted env or even 
chroot without possibility to write anything anywhere. Using compressed 
eggs in such environments is a bit painful...

> In short, I recommend that this PR be changed, assigning it to the
> maintainer of the www/trac port for follow-up and resolution.

Actually I started this pr because I want some Python module package 
policy to emerge and possibly to explicitly specify one recommended way 
of dealing with such packages. As you wrote many port maintainers 
specifically override the order of things in different inconsistent ways 
and even this makes packages more useful having a lot of different 
patches and crotches throughout the ports tree is definitely not a good 
thing.

-- 
Sphinx of black quartz, judge my vow.
Comment 6 koobs 2013-10-23 22:10:56 UTC
All valid points (and I personally agree). It's worth remembering
however, that there are *two* questions that need to be considered
independently:

1) What can be done to resolve "this PR", specifically
2) What else could be done to preclude similar PR's, generally

In the context of issue tracking, only (1) applies, and assigning this
PR to the trac maintainer is the best and quickest way to have your
issue resolved. The verbose reply I provided was just designed as
additional background and context for the decision.

For (2), the FreeBSD Python@ Team has its goals documented on our Wiki
page that includes the development of a python ports policy among others:

https://wiki.freebsd.org/Python

If Python is your thing, I encourage you to jump on IRC, say hi to the
team and let us know what you're interested in making better :)

Koobs
Comment 7 R.Mahmatkhanov 2014-01-26 21:56:17 UTC
Hi, would you please test if this patch working for you? It implements 
just this. Full changelog following:

- remove indefinite article from COMMENT
- add LICENSE (BSD3C)
- set RUN_DEPENDS explicitly
- turn database back-end selection into radio-option keeping existing
   logic: if PGSQL isn't selected SQLITE is used
- use options helpers
- do not use easy_install and convert to auto-generated packing list
- utilize shebangfix, instead of doing the same manually
- remove no more needed x-generate-plist target
- simplify examples installation and unmute it's commands
- do not install rpm stuff, it's not linux here anyway
- whitespace fixes in pkg-descr
- bump PORTREVISION

-- 
Regards,
Ruslan

T.O.S. Of Reality
Comment 8 dfilter service freebsd_committer 2014-02-08 20:02:43 UTC
Author: rm
Date: Sat Feb  8 20:02:33 2014
New Revision: 343380
URL: http://svnweb.freebsd.org/changeset/ports/343380
QAT: https://qat.redports.org/buildarchive/r343380/

Log:
  - remove indefinite article from COMMENT
  - add LICENSE (BSD3C)
  - set RUN_DEPENDS explicitly
  - turn database back-end selection into radio-option keeping existing
  logic: if PGSQL isn't selected SQLITE is used
  - use options helpers
  - do not use easy_install and convert to auto-generated packing list [1]
  - utilize shebangfix, instead of doing the same manually
  - remove no more needed x-generate-plist target
  - simplify examples installation and unmute it's commands
  - do not install rpm stuff, it's not linux here anyway
  - whitespace fixes in pkg-descr
  - bump PORTREVISION
  
  PR:		182332
  Requested by:   Volodymyr Kostyrko <arcade@b1t.name> [1]
  Submitted by:	rm (myself)
  Approved by:	maintainer timeout
  
  - add upstream patch to fix wiki bracketed link with Genshi 0.7
    see http://trac.edgewall.org/changeset/11683 for details
  
  PR:     181419
  Submitted by:   Hung-Yi Chen <gaod@hychen.org>
  Approved by:    maintainer timeout

Added:
  head/www/trac/files/patch-trac_wiki_formatter.py   (contents, props changed)
  head/www/trac/files/patch-trac_wiki_tests_wiki-tests.txt   (contents, props changed)
Deleted:
  head/www/trac/pkg-plist
Modified:
  head/www/trac/Makefile
  head/www/trac/pkg-descr
  head/www/trac/pkg-message

Modified: head/www/trac/Makefile
==============================================================================
--- head/www/trac/Makefile	Sat Feb  8 19:59:23 2014	(r343379)
+++ head/www/trac/Makefile	Sat Feb  8 20:02:33 2014	(r343380)
@@ -3,91 +3,59 @@
 
 PORTNAME=	trac
 PORTVERSION=	1.0.1
+PORTREVISION=	1
 CATEGORIES=	www devel python
 MASTER_SITES=	http://ftp.edgewall.com/pub/trac/ \
 		ftp://ftp.edgewall.com/pub/trac/
 DISTNAME=	Trac-${PORTVERSION}
 
 MAINTAINER=	clsung@FreeBSD.org
-COMMENT=	An enhanced wiki and issue tracking system for software projects
+COMMENT=	Enhanced wiki and issue tracking system for software projects
 
-BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}Genshi>=0.6:${PORTSDIR}/textproc/py-genshi \
-		${PYTHON_PKGNAMEPREFIX}Babel>=0.9.5:${PORTSDIR}/devel/py-babel
-RUN_DEPENDS:=	${BUILD_DEPENDS}
+LICENSE=	BSD3CLAUSE
 
-OPTIONS_DEFINE=		SILVERCITY DOCUTILS PYGMENTS TZ PGSQL SVN
-OPTIONS_DEFAULT=	SILVERCITY DOCUTILS PYGMENTS TZ SVN
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}Babel>=0.9.5:${PORTSDIR}/devel/py-babel \
+		${PYTHON_PKGNAMEPREFIX}Genshi>=0.6:${PORTSDIR}/textproc/py-genshi
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}Babel>=0.9.5:${PORTSDIR}/devel/py-babel \
+		${PYTHON_PKGNAMEPREFIX}Genshi>=0.6:${PORTSDIR}/textproc/py-genshi
+
+OPTIONS_DEFINE=		SILVERCITY DOCUTILS PYGMENTS TZ SVN
+OPTIONS_DEFAULT=	SILVERCITY DOCUTILS PYGMENTS TZ SVN SQLITE
+OPTIONS_RADIO=		DATABASE
+OPTIONS_RADIO_DATABASE=	PGSQL SQLITE
 SILVERCITY_DESC=	Silvercity for syntax highlighting
 DOCUTILS_DESC=		Allow additional text markup
 PYGMENTS_DESC=		Use generic syntax highlighter
 TZ_DESC=		Process Time Zones
 
-CONFLICTS=	ja-trac-[0-9]*
-
-USE_PYTHON=	2
-USE_PYDISTUTILS=	easy_install
-PYDISTUTILS_PKGNAME=	Trac
-PYDISTUTILS_NOEGGINFO=	yes
-
-USE_RC_SUBR=	tracd
-SUB_LIST=	PYTHON_CMD=${PYTHON_CMD}
-
-.include <bsd.port.options.mk>
-
-.if ${PORT_OPTIONS:MSILVERCITY}
-RUN_DEPENDS+=	${LOCALBASE}/bin/source2html.py:${PORTSDIR}/textproc/silvercity
-.endif
-
-.if ${PORT_OPTIONS:MDOCUTILS}
-RUN_DEPENDS+=	${LOCALBASE}/bin/rst2html:${PORTSDIR}/textproc/py-docutils
-.endif
-
-.if ${PORT_OPTIONS:MPYGMENTS}
-RUN_DEPENDS+=	${LOCALBASE}/bin/pygmentize:${PORTSDIR}/textproc/py-pygments
-.endif
-
-.if ${PORT_OPTIONS:MTZ}
-RUN_DEPENDS+=	${PYTHON_PKGNAMEPREFIX}pytz>0:${PORTSDIR}/devel/py-pytz
-.endif
-
-.if ${PORT_OPTIONS:MPGSQL}
-RUN_DEPENDS+=	${PYTHON_SITELIBDIR}/psycopg2/__init__.py:${PORTSDIR}/databases/py-psycopg2
-.else
-RUN_DEPENDS+=	${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3
-.endif
-
-.if ${PORT_OPTIONS:MSVN}
-RUN_DEPENDS+=	${PYTHON_SITELIBDIR}/svn/__init__.py:${PORTSDIR}/devel/py-subversion
-.endif
-
-# This target is only meant to be used by the port maintainer.
-x-generate-plist:
-	(${PORTSDIR}/Tools/scripts/plist -d -m ${MTREE_FILE} ${PREFIX} \
-	| ${SED} -E \
-		's,.*share/nls/.+$$,,g \
-		;s,@dirrm share/man(/.*)?$$,,g \
-		;s,${PYTHON_SITELIBDIR:S,^${PYTHONBASE}/,,},%%PYTHON_SITELIBDIR%%,g \
-		;s,share/trac,%%DATADIR%%,g \
-		;s,share/examples/trac,%%EXAMPLESDIR%%,g \
-		;s,@dirrm (%%PYTHON_SITELIBDIR%%|${PYTHON_LIBDIR:S,${PYTHONBASE}/,,})$$,,g \
-		' | ${TR} -s '\n') > temp-pkg-plist
-
-pre-install:
-	@${REINPLACE_CMD} -i '' -e 's|/usr/bin/python|${PYTHON_CMD}|' ${WRKSRC}/contrib/cgi-bin/trac.fcgi \
-	    ${WRKSRC}/contrib/cgi-bin/trac.cgi
+SILVERCITY_RUN_DEPENDS=	${LOCALBASE}/bin/source2html.py:${PORTSDIR}/textproc/silvercity
+DOCUTILS_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}docutils>0:${PORTSDIR}/textproc/py-docutils
+PYGMENTS_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}pygments>0:${PORTSDIR}/textproc/py-pygments
+TZ_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}pytz>0:${PORTSDIR}/devel/py-pytz
+PGSQL_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}psycopg2>0:${PORTSDIR}/databases/py-psycopg2
+SQLITE_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3
+SVN_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}subversion>0:${PORTSDIR}/devel/py-subversion
+
+CONFLICTS=		ja-trac-[0-9]*
+PORTEXAMPLES=		*
+PORTDATA=		*
+
+USES=			shebangfix
+SHEBANG_FILES=		contrib/cgi-bin/trac.fcgi contrib/cgi-bin/trac.cgi \
+			trac/tests/functional/better_twill.py trac/tests/functional/tester.py \
+			trac/tests/functional/testenv.py trac/tests/functional/compat.py \
+			trac/tests/functional/__init__.py contrib/emailfilter.py \
+			contrib/checkwiki.py contrib/htpasswd.py
+USE_PYTHON=		2
+USE_PYDISTUTILS=	yes
+PYDISTUTILS_AUTOPLIST=	yes
+USE_RC_SUBR=		tracd
 
 post-install:
 	@${MKDIR} ${STAGEDIR}${EXAMPLESDIR}/sample-plugins
-	@${MKDIR} ${STAGEDIR}${EXAMPLESDIR}/rpm
-	@${INSTALL_DATA} ${WRKSRC}/contrib/rpm/* ${STAGEDIR}${EXAMPLESDIR}/rpm
-	@${FIND} ${WRKSRC}/contrib -type f -maxdepth 1 -exec ${INSTALL_DATA} {} ${STAGEDIR}${EXAMPLESDIR}/ \;
-. for d in permissions workflow
-	@${MKDIR} ${STAGEDIR}${EXAMPLESDIR}/sample-plugins/${d}
-	@${INSTALL_DATA} ${WRKSRC}/sample-plugins/${d}/* ${STAGEDIR}${EXAMPLESDIR}/sample-plugins/${d}/
-	@${RM} -rf ${WRKSRC}/contrib/${d}
-. endfor
-	@${INSTALL_DATA} ${WRKSRC}/sample-plugins/*.py ${STAGEDIR}${EXAMPLESDIR}/sample-plugins/
+	${FIND} ${WRKSRC}/contrib -type f -maxdepth 1 -exec ${INSTALL_DATA} {} ${STAGEDIR}${EXAMPLESDIR}/ \;
+	(cd ${WRKSRC}/sample-plugins && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}/sample-plugins)
 	@${MKDIR} ${STAGEDIR}${DATADIR}/cgi-bin
-	@${INSTALL_SCRIPT} ${WRKSRC}/contrib/cgi-bin/* ${STAGEDIR}${DATADIR}/cgi-bin
+	${INSTALL_SCRIPT} ${WRKSRC}/contrib/cgi-bin/* ${STAGEDIR}${DATADIR}/cgi-bin
 
 .include <bsd.port.mk>

Added: head/www/trac/files/patch-trac_wiki_formatter.py
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/trac/files/patch-trac_wiki_formatter.py	Sat Feb  8 20:02:33 2014	(r343380)
@@ -0,0 +1,14 @@
+Backported from upstream repo: http://trac.edgewall.org/changeset/11683
+See PR 181419 for details.
+
+--- trac/wiki/formatter.py.orig        2013-02-01 08:47:41.000000000 +0800
++++ trac/wiki/formatter.py 2013-08-20 14:24:46.982232000 +0800
+@@ -575,7 +575,7 @@
+         ns = fullmatch.group('snsbr')
+         target = unquote_label(fullmatch.group('stgtbr'))
+         match = match[1:-1]
+-        return '&lt;%s&gt;' % \
++        return u'&lt;%s&gt;' % \
+                 self._make_link(ns, target, match, match, fullmatch)
+
+     def _shref_formatter(self, match, fullmatch):

Added: head/www/trac/files/patch-trac_wiki_tests_wiki-tests.txt
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/www/trac/files/patch-trac_wiki_tests_wiki-tests.txt	Sat Feb  8 20:02:33 2014	(r343380)
@@ -0,0 +1,19 @@
+Backported from upstream repo: http://trac.edgewall.org/changeset/11683
+See PR 181419 for details.
+
+--- trac/wiki/tests/wiki-tests.txt.orig        2013-08-20 14:02:43.308222000 +0800
++++ trac/wiki/tests/wiki-tests.txt 2013-08-20 14:01:18.000000000 +0800
+@@ -314,6 +314,13 @@
+ ------------------------------
+ <p>
+ nolink:&#34;&lt;blink&gt;&#34;
++</p> 
++------------------------------ 
++============================== Bracketed links 
++See <http://en.wikipedia.org/wiki/Mornington_Crescent_(game)> 
++------------------------------ 
++<p> 
++See &lt;<a class="ext-link" href="http://en.wikipedia.org/wiki/Mornington_Crescent_(game)"><span class="icon"></span>http://en.wikipedia.org/wiki/Mornington_Crescent_(game)</a>&gt; 
+ </p>
+ ------------------------------
+ ============================================================

Modified: head/www/trac/pkg-descr
==============================================================================
--- head/www/trac/pkg-descr	Sat Feb  8 19:59:23 2014	(r343379)
+++ head/www/trac/pkg-descr	Sat Feb  8 20:02:33 2014	(r343380)
@@ -5,7 +5,7 @@ development process and policies.
 
 All aspects of Trac have been designed with one single goal, to simplify
 tracking and communication of software issues, enhancements and monitoring
-overall progress. 
+overall progress.
 
 What is Trac?
 
@@ -14,8 +14,8 @@ What is Trac?
     * A flexible web-based issue tracker
     * An interface to the Subversion revision control system
 
-At the core of Trac lies an integrated wiki and issue/bug database.  Using
+At the core of Trac lies an integrated wiki and issue/bug database. Using
 wiki markup, all objects managed by Trac can directly link to other
-issues/bug reports, code changesets, documentation and files. 
+issues/bug reports, code changesets, documentation and files.
 
 WWW: http://trac.edgewall.org/

Modified: head/www/trac/pkg-message
==============================================================================
--- head/www/trac/pkg-message	Sat Feb  8 19:59:23 2014	(r343379)
+++ head/www/trac/pkg-message	Sat Feb  8 20:02:33 2014	(r343380)
@@ -6,10 +6,10 @@ You should be careful to check that the 
 been ported to 1.0.1, as they most probably won't work without adaptation
 due to the numerous internal changes that occurred during 1.0.1 development.
 
-See:	http://trac.edgewall.org/wiki/TracDev/ApiChanges/1.0
+See: http://trac.edgewall.org/wiki/TracDev/ApiChanges/1.0
 
 Consult the upgrade instructions at:
 
-	http://trac.edgewall.org/wiki/TracUpgrade
+  http://trac.edgewall.org/wiki/TracUpgrade
 
 *******************************************************************************
_______________________________________________
svn-ports-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-ports-all
To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
Comment 9 Ruslan Makhmatkhanov freebsd_committer 2014-02-08 20:03:45 UTC
State Changed
From-To: open->closed

This is now installed as usual distutils package.