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 е функция", а нещо като "rvm е хеширано" (...?...).

Също така е интересно, че проблемът не беше ограничен до инсталацията в цялата система. Разруших инсталацията на rvm за цялата система, премахнах препратките в /etc и го инсталирах отново без sudo... същият проблем.

Бих казал, че вината беше моя и под „моя“ имам предвид, че не бях наясно как bash обработва някои потребителски превключватели. Може да е полезно и на други, така че ще докладвам какво съм направил.

Имах ssh'd в сървъра като общ потребител и след това превключих на потребителя, който ще изпълнява стека на релсите: 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 и аз бих казал, че сега всичко изглежда работи.

person tompave    schedule 06.04.2013
comment
и всичко е свързано с активирането на обвивката за влизане в терминалния емулатор - проверете rvm.io/integration/gnome-terminal за пример. - person mpapis; 06.04.2013
comment
Благодаря. Да, rvm ме насочи към тази страница, когато ме предупреди, но използвам mac и не можах да намеря опция Terminal.app, подобна на тази, налична за gnome-terminal . Освен това мисля, че Terminal.app вече стартира като обвивка за вход (извлича ~/.bash_login). Както и да е, не бях последвал връзката в долната част на статията за обвивки за влизане. .. не се сетих за su -l username. Това беше доста полезно, благодаря. - person tompave; 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