Bug 199107

Summary: Several rubygem CONFLICTS: Eg: archivers/rubygem-rubyzip & devel/rubygem-i18n causing security/metasploit build failure
Product: Ports & Packages Reporter: dewayne
Component: Individual Port(s)Assignee: freebsd-ruby (Nobody) <ruby>
Status: Closed Not A Bug    
Severity: Affects Some People CC: delphij, koobs, mmoll, ruby, sunpoet, swills, tanawts, xmj
Priority: --- Keywords: needs-patch, needs-qa
Version: LatestFlags: koobs: maintainer-feedback-
Hardware: Any   
OS: Any   

Description dewayne 2015-04-02 04:41:11 UTC
Seems that security/metasploit requires the (now) conflicting ports:
devel/rubygem-i18n (via devel/rubygem-activesupport changed 2 weeks ago)
archivers/rubygem-rubyzip

The hierarchical conflict appears via my portmaster log of: 
security/metasploit >> archivers/rubygem-rubyzip (3/48)
and 
security/metasploit >> databases/rubygem-activerecord >> databases/rubygem-activemodel >> devel/rubygem-activesupport >> devel/rubygem-i18n (8/48)


The error log advises

pkg-static: rubygem-i18n-0.7.0,2 conflicts with rubygem-rubyzip-1.1.6 (installs files into the same place).  Problematic file: /usr/local/lib/ruby/gems/2.1/doc/rubyzip-1.1
*** Error code 70


Examining the makefiles reveals:
devel/rubygem-activesupport
RUN_DEPENDS=    rubygem-i18n>=0.6.4:${PORTSDIR}/devel/rubygem-i18n \

and 

security/metasploit
rubygem-rubyzip>=1.1:${PORTSDIR}/archivers/rubygem-rubyzip \

Unfortunately that's all I can provide...
Comment 1 dewayne 2015-04-06 03:37:02 UTC
(In reply to dewayne from comment #0)
Update with an svn update of ports today

Installing rubygem-json_pure-1.8.2...
pkg-static: rubygem-json_pure-1.8.2 conflicts with rubygem-i18n-0.7.0,2 (installs files into the same place).  Problematic file: /usr/local/lib/ruby/gems/2.1/doc/i18n-0.7.0/rdoc/GetText/PoParser.html
*** Error code 70
Comment 2 dewayne 2015-04-17 07:58:46 UTC
(In reply to dewayne from comment #1)
After sprinkling this 
OPTIONS_UNSET=DOC RDOC DOCS HTMLDOCS PORTDOCS APIDOCS RDOC MANPAGES EXAMPLES PORTEXAMPLES
over all the ruby and rubygem ports, a similar problem appears

pkg-static: rubygem-activemodel-3.2.21 conflicts with rubygem-json_pure-1.8.2 (installs files into the same place).  Problematic file: /usr/local/lib/ruby/gems/2.1/doc/activemodel-3.2.21/rdoc/ActiveModel/AttributeMethods/ClassMethods/AttributeMethodMatcher.html
*** Error code 70
Comment 3 dewayne 2015-05-20 00:29:24 UTC
(In reply to dewayne from comment #2)
Continuing to fail due to conflicts (on amd64, 10.1S r283037 (yesterday)):

Log from rubygem-arel3
----------------------
 Installing rubygem-arel3-3.0.3,1...
pkg-static: rubygem-arel3-3.0.3,1 conflicts with rubygem-activemodel-3.2.21 (installs files into the same place).  Problematic file: /usr/local/lib/ruby/gems/2.1/doc/activemodel-3.2.21/rdoc/ActiveModel/AttributeMethods/ClassMethods/AttributeMethodMatcher.html
*** Error code 70

Upon examining the svn logs for both, they were last modified on:
/usr/ports/databases/rubygem-arel3  2014-08-27

/usr/ports/databases/rubygem-activerecord 2015-04-03

/usr/ports/security/metasploit  2015-03-09

My last successful build of metaploit was 2015-02-22.
Comment 4 Kubilay Kocak freebsd_committer freebsd_triage 2015-05-25 02:32:11 UTC
Maintainer timeout, open to take. CC some ruby@ people explicitly.
Comment 5 Michael Moll freebsd_committer freebsd_triage 2015-05-25 13:45:43 UTC
I can't reproduce this here on my workstation and also not in poudriere. Neither rubyzip vs. i18n nor arel3 vs. activerecord.

Did you build take place in poudriere or on the system directly?
Comment 6 Po-Chuan Hsieh freebsd_committer freebsd_triage 2015-05-25 14:09:40 UTC
It looks strange and I cannot reproduce this problem.

For examples, rubygem-i18n-0.7.0,2.txz contains only:
/usr/local/share/licenses/rubygem-i18n-0.7.0,2/*
/usr/local/lib/ruby/gems/2.1/cache/i18n-0.7.0.gem
/usr/local/lib/ruby/gems/2.1/specifications/i18n-0.7.0.gemspec
/usr/local/lib/ruby/gems/2.1/doc/i18n-0.7.0/*
/usr/local/lib/ruby/gems/2.1/gems/i18n-0.7.0/*

It will not install any file to /usr/local/lib/ruby/gems/2.1/doc/rubyzip-1.1.6/.
Then it cannot conflict with rubygem-rubyzip-1.1.6.
Comment 7 dewayne 2015-05-27 00:01:15 UTC
(In reply to Sunpoet Po-Chuan Hsieh from comment #6)
Thank-you for looking into this issue.

I'm able to reproduce *a* problem simply by building the metasploit package on a:
FreeBSD 10.1-STABLE FreeBSD 10.1-STABLE #0 r283313M: Sun May 24 06:48:51 AEST 2015 1001515 1001515
poudriere is not used.

I just updated /usr/ports via svnlite, and attempted to build metasploit with this result
===>   Registering installation for rubygem-journey-1.0.4 as automatic
[b2.hs] Installing rubygem-journey-1.0.4...
pkg-static: rubygem-journey-1.0.4 conflicts with rubygem-erubis-2.7.0_1 (installs files into the same place).  Problematic file: /usr/local/lib/ruby/gems/2.1/doc/erubis-2.7.0/rdoc/ActionController.html
*** Error code 70
Stop.
make[2]: stopped in /usr/ports/www/rubygem-journey
*** Error code 1
Stop.
make[1]: stopped in /usr/ports/www/rubygem-actionpack
*** Error code 1
Stop.
make: stopped in /usr/ports/security/metasploit

Out of frustration I've tried silly things like 
OPTIONS_UNSET=DOC RDOC DOCS RDOCS HTMLDOCS PORTDOCS APIDOCS RDOC 
and
pkg delete rubygem-rubyzip-1.1.7 rubygem-multi_json-1.11.0 rubygem-json_pure-1.8.2 rubygem-journey-1.0.4 rubygem-i18n-0.7.0,2 rubygem-erubis-2.7.0_1 rubygem-builder-3.0.4 rubygem-activesupport-3.2.21 rubygem-activemodel-3.2.21 ruby21-gems-2.4.7 ruby-2.1.6ruby-2.1.6,1 
which are all the ruby related packages.

So after applying the above, the problem is reproduced via:
cd /usr/ports/security/metasploit
make -DBATCH clean deinstall package

This is a one off test, as we don't incrementally build packages (historical reasons) we blow everything away before a major rebuild and currently build 600+ packages successfully but only metasploit uses ruby and hence failing, which appear to be due to doc or rdoc issues with different dependences over time.
(blow away means: pkg delete -f -y -a; rm -R $WRKDIRPREFIX/* $STAGEDIR/* )
Comment 8 dewayne 2015-06-15 07:03:08 UTC
(In reply to dewayne from comment #7)
When I removed STAGEDIR=/usr/staging from make.conf, the conflicts amoung the various rubygem ports ceased being a barrier.  So that is where the problem lay.

On the way to this discovery, I'd introduced 
NOPORTDOCS and DISABLE_CONFLICTS into make.conf, which unfortunately moved the doc and rdoc conflicts to other areas. Eg
pkg-static: rubygem-network_interface-0.0.1 conflicts with rubygem-msgpack-0.5.5 (installs files into the same place).  Problematic file: /usr/local/lib/ruby/gems/2.1/extensions/amd64-freebsd-10/2.1/msgpack-0.5.5/gem.build_complete
Comment 9 Mark Linimon freebsd_committer freebsd_triage 2015-07-01 18:20:48 UTC
Canonicalize assignment.
Comment 10 Antoine Brodin freebsd_committer freebsd_triage 2016-05-20 11:52:23 UTC
Overriding STAGEDIR with something that is not unique per port will obviously lead to conflicts with ports using autoplist etc.
If you override it, use something unique per port.