установка системы 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$

person tompave    schedule 05.04.2013    source источник


Ответы (2)


вам следует проверить /usr/local/rvm/wrappers, особенно /usr/local/rvm/wrappers/default, на наличие двоичных файлов, которые можно использовать из PATH без каких-либо других настроек в среде.

person mpapis    schedule 05.04.2013
comment
Привет спасибо. Я думаю, что нашел, что было не так. Не могли бы вы проверить ответ, который я дал сам, пожалуйста? - person tompave; 06.04.2013

Я считаю, что нашел, что было не так. Очевидно, rvm не была правильно загружена как функция, то есть
$ type rvm | head -n 1
возвращала не "rvm is a function", а что-то вроде "rvm is hashed" (...?...).

Также интересно, что проблема не ограничивалась общесистемной установкой. Я взорвал общесистемную установку rvm, удалил ссылки в /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

... обратите внимание, что она была НЕ отмечена =*.
Я использовал команду rvm use ruby-2.0.0-p0 --default, и меня предупредили, что rvm не загружается как функция и что что-то не работало (не помню точное сообщение).

Это был прорыв, и поскольку я получил ~/.bash_profile, я смог успешно выбрать этот ruby, и все символические ссылки (ruby, irb, rake и т. д.) были немедленно созданы.

Однако это было не идеально.
По умолчанию моя папка $HOME имеет обычные три файла: ~/.profile, ~/.bash_profile и ~/.bashrc (плюс файлы для zsh).
~/.bash_profile был добавлен rvm< /strong>, и у меня есть исходный код ~/.profile.
~/.profile, а затем автоматически создает ~/.bashrc, если используется bash.

Однако, как я уже сказал, выполнение su appusr bash приводит только к исходному коду ~/.bashrc, поэтому не удается проанализировать оператор, загружающий rvm как функцию. Очень раздражает.
Чтобы передать ~/.bashrc источнику ~/.bash_profile, потребуется какой-то элемент управления (переменная ENV?), чтобы избежать бесконечного цикла ссылок, и это кажется излишним...
Поэтому я просто переместил [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" в ~/.bashrc, и я d сказать, что все, кажется, работает сейчас.

person tompave    schedule 06.04.2013
comment
и все дело в включении оболочки входа в эмулятор терминала - проверьте rvm.io/integration/gnome-terminal для примера. - person mpapis; 06.04.2013
comment
Раз уж мы в теме... почему бы не поместить строку [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" прямо в ~/.bashrc? Есть веская причина? - person tompave; 06.04.2013
comment
источник не может быть добавлен к .bashrc в RVM 1.x - есть редкие ошибки, которые могут сломаться в нескольких случаях, лучший способ заставить его работать до сих пор - это источник только для оболочки входа в систему. - person mpapis; 07.04.2013