简体   繁体   中英

Errno::EEXIST File Exists error when installing 'ferret' gem from local .gem file

I am trying to install the ferret ruby gem on a RHEL zlinux (s390x architecture) machine, and am trying to install a .gem file after patching it so that it will compile .

But even trying to install the pristine fetched gem, it fails as follows:

[ me@s390x ]$ sudo gem fetch ferret
Downloaded ferret-0.11.6
[ me@s390x ]$ sudo gem install -lV ferret-0.11.6.gem 
Installing gem ferret-0.11.6
Using local gem /home/rubyusr/rubygems/gems/cache/ferret-0.11.6.gem
/home/rubyusr/rubygems/gems/gems/ferret-0.11.6/bin
ERROR:  While executing gem ... (Errno::EEXIST)
    File exists - /home/rubyusr/rubygems/gems/gems/ferret-0.11.6/bin

None of the above-mentioned directories or files related to "ferret" existed before running this command.

Also strange is that /home/rubyusr/rubygems/gems/gems/ferret-0.11.6/bin is a directory, although maybe that is a normal complaint.

A final complicating factor is when I run the gem command I am actually running a shell script that sets the environment variables for my unusual rubygems directory (I haven't had any problems so far with this set up). Here is my gem shell script:

#!/bin/bash

export GEM_HOME=/home/rubyusr/rubygems/gems
export GEM_PREFIX=/home/rubyusr/rubygems
export RUBYLIB=$GEM_PREFIX/lib:/usr/lib/ruby:/usr/lib/ruby/site_ruby:/usr/lib/site_ruby
export GEM_PATH=$GEM_HOME

OUR_GEM_COMMAND=$GEM_PREFIX/bin/gem

$OUR_GEM_COMMAND $@

EDIT:

I forgot to add that running the gem install command normally does not seem to result in this error (but ferret fails to compile), with the error:

posh.h:515:4: error: #error POSH cannot determine target CPU

There is a bug in Debian asking for adding support for arm64: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=770922

It needs adding a few lines in the file ext/posh.h to add support for that CPU:

--- a/ext/posh.h
+++ b/ext/posh.h
@@ -512,6 +512,11 @@
#  define POSH_CPU_STRING "PA-RISC"
#endif

+#if defined __aarch64__
+#  define POSH_CPU_AARCH64 1
+#  define POSH_CPU_STRING "AArch64"
+#endif
+
#if !defined POSH_CPU_STRING
#  error POSH cannot determine target CPU
#  define POSH_CPU_STRING "Unknown" /* this is here for Doxygen's  benefit */

Adding support for s390 was about adding these lines:

#if defined __s390__
#  define POSH_CPU_S390 1
#  define POSH_CPU_STRING "S/390"
#endif

if you know the corresponding values for S390/X, you can add them in there.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM