RVM系统安装,bin没有正确的符号链接



我在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$

你应该检查/usr/local/rvm/wrappers,特别是/usr/local/rvm/wrappers/default的二进制文件可以从PATH中使用,而在环境中没有其他设置

我相信我找到了问题所在。显然rvm没有作为一个函数正确加载,那就是
$ type rvm | head -n 1
没有返回"rvm是一个函数",但类似于"rvm是散列的"(…?…)。

有趣的是,这个问题并不局限于整个系统的安装。我爆破了系统范围rvm install,删除了/etc中的引用,并在没有sudo的情况下再次安装它…同样的问题。

我要说这是我的错,我的意思是我不知道bash如何处理一些用户切换。它可能对其他人也有用,所以我将报告我所做的。

我以普通用户身份ssh到服务器,然后切换到运行rails堆栈的用户: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所需的命令。
到目前为止,一切顺利。
问题是,在安装之后,它不知何故未能选择 ruby我已经安装作为默认解释器,所以它没有创建符号链接。

我注意到这一点,因为当我发布rvm list时,我看到了:

rvm rubies
   ruby-2.0.0-p0 [ x86_64 ]
# => - current
# =* - current && default
#  * - default

…注意NOT=*标记。
我使用命令rvm use ruby-2.0.0-p0 --default,然后我被警告rvm不是作为函数加载的,并且有些东西不能工作(记不清确切的消息)。

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

但这并不理想。
我的$HOME文件夹的默认设置通常有三个文件:~/.profile, ~/.bash_profile~/.bashrc(加上zsh的文件)。
~/.bash_profile是由rvm安装添加的,我的源代码是~/.profile
如果使用的是bash,那么~/.profile将自动生成~/.bashrc

正如我所说的,然而,通过执行su appusr bash只是源~/.bashrc,因此无法将加载rvm的语句解析为函数。很烦人的。
告诉~/.bashrc~/.bash_profile将需要某种控制(一个ENV变量?),以避免无限引用循环,似乎有点小题大做…
所以我只是把[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"移动到~/.bashrc,我想说现在一切似乎都工作了。

最新更新