rvm系统安装,垃圾箱没有正确符号链接

时间:2013-04-05 13:33:19

标签: ruby ubuntu rvm

我在ubuntu 12.04上并安装了rvm系统以下:
$ \curl -L https://get.rvm.io | sudo bash -s stable

到目前为止,我总是执行单个用户安装,并且说实话,我对系统安装的结果感到很困惑。
它确实将rvm bin目录放在了我的路径中,但是它使用无法直接使用的名称对所有二进制文件进行符号链接。
这是否意味着我应该逐个对它们进行符号化? 出了什么问题?
这是一种亵渎行为吗?

appusr@server-name:/usr/local/rvm/bin$ ll
total 60
drwxrwsr-x  2 root     rvm   4096 Apr  5 13:11 ./
drwxrwsr-x 23 root     rvm   4096 Apr  5 13:04 ../
-rwxrwxr-x  1 root     rvm    578 Apr  5 13:04 bundle*
lrwxrwxrwx  1 appusr   rvm     41 Apr  5 13:11 erb-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/erb*
lrwxrwxrwx  1 appusr   rvm     48 Apr  5 13:11 erb-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/erb*
lrwxrwxrwx  1 appusr   rvm     41 Apr  5 13:11 gem-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/gem*
lrwxrwxrwx  1 appusr   rvm     48 Apr  5 13:11 gem-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/gem*
lrwxrwxrwx  1 appusr   rvm     41 Apr  5 13:11 irb-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/irb*
lrwxrwxrwx  1 appusr   rvm     48 Apr  5 13:11 irb-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/irb*
-rwxrwxr-x  1 root     rvm    556 Apr  5 13:04 rake*
lrwxrwxrwx  1 appusr   rvm     42 Apr  5 13:11 rake-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/rake*
lrwxrwxrwx  1 appusr   rvm     49 Apr  5 13:11 rake-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/rake*
lrwxrwxrwx  1 appusr   rvm     42 Apr  5 13:11 rdoc-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/rdoc*
lrwxrwxrwx  1 appusr   rvm     49 Apr  5 13:11 rdoc-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/rdoc*
lrwxrwxrwx  1 appusr   rvm     40 Apr  5 13:11 ri-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/ri*
lrwxrwxrwx  1 appusr   rvm     47 Apr  5 13:11 ri-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/ri*
lrwxrwxrwx  1 appusr   rvm     42 Apr  5 13:11 ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/ruby*
lrwxrwxrwx  1 appusr   rvm     49 Apr  5 13:11 ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/ruby*
-rwxrwxr-x  1 root     rvm   1307 Apr  5 13:04 rvm*
-rwxrwxr-x  1 root     rvm   1512 Apr  5 13:04 rvm-auto-ruby*
-rwxrwxr-x  1 root     rvm   1803 Apr  5 13:04 rvm-exec*
-rwxrwxr-x  1 root     rvm  13130 Apr  5 13:04 rvm-installer*
-rwxrwxr-x  1 root     rvm   3850 Apr  5 13:04 rvm-prompt*
-rwxrwxr-x  1 root     rvm   2263 Apr  5 13:04 rvm-shell*
-rwxrwxr-x  1 root     rvm    648 Apr  5 13:04 rvm-smile*
-rwxrwxr-x  1 root     rvm   2229 Apr  5 13:04 rvmsudo*
lrwxrwxrwx  1 appusr   rvm     44 Apr  5 13:11 testrb-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/testrb*
lrwxrwxrwx  1 appusr   rvm     51 Apr  5 13:11 testrb-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/testrb*
appusr@server-name:/usr/local/rvm/bin$ 
appusr@server-name:/usr/local/rvm/bin$ 
appusr@server-name:/usr/local/rvm/bin$ 
appusr@server-name:/usr/local/rvm/bin$ which ruby
appusr@server-name:/usr/local/rvm/bin$ which irb
appusr@server-name:/usr/local/rvm/bin$ which gem
appusr@server-name:/usr/local/rvm/bin$ /usr/bin/env ruby -v
/usr/bin/env: ruby: No such file or directory
appusr@server-name:/usr/local/rvm/bin$ ruby -v
The program 'ruby' can be found in the following packages:
 * ruby1.8
 * ruby1.9.1
Ask your administrator to install one of them
appusr@server-name:/usr/local/rvm/bin$

2 个答案:

答案 0 :(得分:1)

您应该/usr/local/rvm/wrappers特别是/usr/local/rvm/wrappers/default检查可以在PATH使用的二进制文件,而不需要在环境中进行其他设置。

答案 1 :(得分:1)

我相信我发现了什么是错的。显然rvm未正确加载为函数,即为 $ type rvm | head -n 1
没有返回“rvm是一个函数”,但像“rvm是哈希”(......?...)。

有趣的是,问题不仅限于系统范围的安装。我破坏了系统范围的 rvm 安装,删除了/etc中的引用,并在没有sudo的情况下重新安装了......同样的问题。

我说这是我的错,而“我的”我的意思是我不知道 bash 如何处理某些用户切换。它也可能对其他人有用,所以我会报告我做了什么。

我以普通用户身份进入服务器,然后切换到将运行rails stack的用户:su appusr(使用bash)。

之后,我使用以下方式安装rvm
$ \curl -L https://get.rvm.io | bash -s stable


当我尝试系统广泛安装时,我当然也将用户添加到 rvm 组中: $ sudo usermod -a -G rvm appusr


...然后再次注销:exit,再次su appusr

现在,似乎这样做 bash 只是来源~/.bashrc,而不是~/.bash_profile,其中rvm将语句加载rvm作为功能:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

仍然,rvm二进制文件位于 PATH 中,我可以发出安装ruby所需的命令。
到目前为止,这么好 问题是在安装后它以某种方式无法选择我已安装的 only ruby作为默认解释器,因此它没有创建符号链接。

我注意到了,因为当我发出rvm list时,我被提出:

rvm rubies

   ruby-2.0.0-p0 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

...请注意 标有=*的方式。
我使用了命令rvm use ruby-2.0.0-p0 --default,并且我被警告说rvm不是作为函数加载并且某些东西无法工作(无法记住确切的消息)。

这是一个突破,当我采购~/.bash_profile时,我可以成功选择ruby和所有符号链接(rubyirbrake,等)立即创建。

但这并不理想 我的$HOME文件夹的默认设置包含通常的三个文件:~/.profile~/.bash_profile~/.bashrc(以及zsh的文件)。
rvm 安装添加了~/.bash_profile,我的源代码为~/.profile
如果正在使用 bash ~/.profile会自动提供~/.bashrc来源。

正如我所说,通过su appusr bash 来源~/.bashrc,因此无法解析加载 rvm作为函数的语句。非常讨厌。
~/.bashrc告诉源~/.bash_profile需要某种控制(一个ENV变量?)以避免无限的参考循环,并且似乎过度使用...
所以我只是将[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"移到~/.bashrc,我说现在一切似乎都有效。