I'm on ubuntu 12.04 and installed rvm system wide with:
$ \curl -L https://get.rvm.io | sudo bash -s stable
So far I've always performed single user installs and to he honest I'm quite confused by the results of the system wide install.
It did put the rvm bin directory in my path, but it symlinked all the binaries with names that can't be directly used.
Does it mean that I should symlink them one by one?
Did something go wrong?
Is that the defalt behaviour?
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$
you should check /usr/local/rvm/wrappers especially /usr/local/rvm/wrappers/default for binaries that can be used from PATH with no other settings in environment.
I believe I found what was wrong. Apparently rvm wasn't properly loaded as a function, that is
$ type rvm | head -n 1
didn't return "rvm is a function", but something like "rvm is hashed" (...?...).
It is also interesting that the problem wasn't limited to the system wide install. I imploded the system wide rvm install, removed the references in /etc, and installed it again without sudo... same problem.
I'd say it was my fault, and by "my" I mean that I wasn't aware of how bash handles some user switches. It may be useful to others as well, so I'll report what I did.
I had ssh'd into the server as a general user and then switched to the user who will run the rails stack: su appusr (using bash).
After that, I installed rvm using:
$ \curl -L https://get.rvm.io | bash -s stable
When I tried the system wide install I of course also added the user to the rvm group with:
$ sudo usermod -a -G rvm appusr
...and logged out and in again: exit, and again su appusr.
Now, it seems that by doing so bash was only sourcing ~/.bashrc, and not ~/.bash_profile where rvm had placed the statement to load rvm as a function:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
Still, the rvm binary was in my PATH, and I could issue the commands needed to install ruby.
So far, so good.
The problem was that after the installation it somehow failed to select the only ruby I had installed as the default interpreter, and so it didn't create the symlinks.
I noticed it because when I issued rvm list I was presented with:
rvm rubies
ruby-2.0.0-p0 [ x86_64 ]
# => - current
# =* - current && default
# * - default
... notice how it was NOT marked with =*.
I used the command rvm use ruby-2.0.0-p0 --default, and I was warned that rvm wasn't loaded as a function and that something could not work (can't rememeber the exact message).
That was a breakthrough, and as I sourced ~/.bash_profile I could successfully select that ruby and all the symlinks (ruby, irb, rake, etc) were immediately created.
That wasn't ideal, though.
The default setup of my $HOME folder has the usual three files: ~/.profile, ~/.bash_profile and ~/.bashrc (plus the ones for zsh).
~/.bash_profile was added by the rvm installation, and I'm having it source ~/.profile.
~/.profile, then, automatically sources ~/.bashrc if bash is being used.
As I said, however, by doing su appusr bash just sources ~/.bashrc, and so fails to parse the statement loading rvm as a function. Very annoying.
Telling ~/.bashrc to source ~/.bash_profile would need some sort of control (an ENV variable?) to avoid an infinite reference loop, and seemed overkilling...
So I just moved [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" into ~/.bashrc, and I'd say everything seems to work now.
Related
I have a .profile which is copied to /home/vscode during my container build before running common-debian.sh
This is important as during container image build common-delian.sh will skip creating a default .profile if the file is already present
In that profile I have a number of bash functions and some exported variables.
One of the variables relies on executing one of the declared functions, and in my shell I can see the correct variable and value is set.
This problem arises when opening a new integrated terminal in vscode.
"new terminal" command
However none of my functions are available in the shell to execute.
Confirmed through typeset -F
I can run source ~/.profile and the functions are then available in the shell.
Is there some place I can turn up logging to determine what is happening here?
Details about the install
vscode Host install is Mac M1
VERSION='0.202.6'
CONTENTS_URL='https://github.com/microsoft/vscode-dev-containers/tree/main/containers/debian/history/0.202.6.md'
DEFINITION_ID='debian'
VARIANT='bullseye'
GIT_REPOSITORY='https://github.com/microsoft/vscode-dev-containers/'
GIT_REPOSITORY_RELEASE='v0.224.0'
BUILD_TIMESTAMP='Fri, 25 Feb 2022 10:48:36 GMT'
Example function declaration
kconfig() {
ls $HOME/.kube/configs/* | tr '\n' ':'
}
declare -f kconfig
Example variable making use
export KUBECONFIG="$(kconfig)"
I can confirm before sourcing .profile, this variable is set and valid and should only have come from the .profile declaration.
home folder for reference
vscode ➜ /workspace (master ✗) $ ls -al ~
total 76
drwxr-xr-x 1 vscode vscode 4096 Apr 27 18:59 .
drwxr-xr-x 1 root root 4096 Feb 25 10:55 ..
drwxr-xr-x 1 501 dialout 160 Mar 8 22:31 .aws
-rw-r--r-- 1 vscode vscode 220 Aug 4 2021 .bash_logout
-rw-r--r-- 1 vscode vscode 4665 Feb 25 10:55 .bashrc
drwxr-xr-x 3 vscode vscode 4096 Apr 27 18:59 .cache
drwxr-xr-x 1 501 dialout 192 Apr 25 21:41 .config
drwxr-xr-x 1 501 dialout 160 Apr 27 14:20 .creds
-rw-r--r-- 1 vscode vscode 500 Apr 27 18:59 .gitconfig
drwx------ 2 vscode vscode 4096 Apr 27 18:59 .gnupg
drwxr-xr-x 1 501 dialout 160 Mar 9 21:59 .kube
drwxr-xr-x 12 vscode vscode 4096 Feb 25 10:55 .oh-my-zsh
-rw-r--r-- 1 vscode vscode 2381 Apr 27 19:19 .profile
drwxr-xr-x 1 vscode root 4096 Apr 27 18:59 .vscode-server
drwxr-xr-x 3 vscode root 4096 Apr 27 18:26 .vscode-server-insiders
-rw-r--r-- 1 vscode vscode 3897 Feb 25 10:55 .zshrc
Edit below:
Now I am copying this file in as ~/.bash_profile
There is still a .profile, vscode common-debian.sh creates this if the file is not present when building the container image.
vscode ➜ /workspace (master ✗) $ ls -al ~
total 80
drwxr-xr-x 1 vscode vscode 4096 Apr 27 20:08 .
drwxr-xr-x 1 root root 4096 Feb 25 10:55 ..
drwxr-xr-x 1 501 dialout 160 Mar 8 22:31 .aws
-rw-r--r-- 1 vscode vscode 220 Aug 4 2021 .bash_logout
-rw-r--r-- 1 vscode vscode 2671 Apr 27 19:57 .bash_profile
-rw-r--r-- 1 vscode vscode 4665 Feb 25 10:55 .bashrc
drwxr-xr-x 3 vscode vscode 4096 Apr 27 20:08 .cache
drwxr-xr-x 1 501 dialout 192 Apr 25 21:41 .config
drwxr-xr-x 1 501 dialout 160 Apr 27 14:20 .creds
-rw-r--r-- 1 vscode vscode 500 Apr 27 20:08 .gitconfig
drwx------ 2 vscode vscode 4096 Apr 27 20:08 .gnupg
drwxr-xr-x 1 501 dialout 160 Mar 9 21:59 .kube
drwxr-xr-x 12 vscode vscode 4096 Feb 25 10:55 .oh-my-zsh
-rw-r--r-- 1 vscode vscode 807 Aug 4 2021 .profile
drwxr-xr-x 1 vscode root 4096 Apr 27 20:08 .vscode-server
drwxr-xr-x 3 vscode root 4096 Apr 27 20:07 .vscode-server-insiders
-rw-r--r-- 1 vscode vscode 3897 Feb 25 10:55 .zshrc
also added the following to /etc/profile.d/
# This file is intended to be copied into /etc/profile.d
project_profile="$HOME/.bash_profile"
if [ -r $project_profile ]; then
source $project_profile
else
echo "File not found or not readable: $project_profile"
fi
none of which has had an effect on the resulting new shells
perhaps ignoring vscode
docker exec -it {container} /bin/bash still has the same results.
I have also tried creating an empty terminal profile with an empty shell profile, launching vscode from that terminal window.
Thinking that perhaps inherited env was causing issues.
Also set the following user setting
"terminal.integrated.inheritEnv": false,
From the man page for bash (in the INVOCATION section):
When bash is started non-interactively, to run a shell script, for
example, it looks for the variable BASH_ENV in the environment, expands
its value if it appears there, and uses the expanded value as the name
of a file to read and execute. Bash behaves as if the following command
were executed:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
but the value of the PATH variable is not used to search for the filename.
In your use case, i.e. a shell script, no startup file is read. But you can change that by setting the value of BASH_ENV to a file you want to read on startup. Alternately your script can source anything you like when it runs, e.g. source .profile.
Extracted from answer comments:
Original Poster noted that the issue was fixed using this in vscode:
"terminal.integrated.defaultProfile.linux": "bash",
"terminal.integrated.profiles.linux": {
"bash": {
"path": "/bin/bash",
"icon": "terminal-bash",
"args": [ "-l" ]
},
}
(The -l arg to make it a login shell being, probably, the important part?)
I'm trying to build gcc-7.1.0 locally on Windows via Cygwin (I already have gcc 5.4.0 installed and functioning). I downloaded the tar, ran the configure program in its own directory as prescribed, which yielded:
~/build-gcc
$ ll
total 609
-rw-r--r-- 1 Barry None 31021 Aug 12 09:08 config.log
-rwxr-xr-x 1 Barry None 33630 Aug 12 09:08 config.status
-rw-r--r-- 1 Barry None 551897 Aug 12 09:08 Makefile
-rw-r--r-- 1 Barry None 13 Aug 12 09:08 serdep.tmp
Great, now:
$ make -j4
$
Nothing.
$ make --version
$
Nothing again.
$ which make
/usr/bin/make
$ cygcheck -c make
Cygwin Package Information
Package Version Status
make 4.2.1-2 OK
So it exists at least. And trying to reinstall make via cygwin suggests that everything is up to date. What's going wrong here?
How can I check all the different shells that I can use in OSX Terminal application?
The default one is bash, and I know zsh because I tried and it worked. I wonder how can I check if there are any more than this two.
The easy way is go to /etc and check the shells file. The content is the list of shells available in Mac OSX.
The included by default are:
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
Alternatively, you can check their binaries by going to /bin and recognising them visually. Naturally, you have to know them in order to recognise them.
In MacOS the following command will list the available shells on your system
$ ls -l /bin/*sh
-r-xr-xr-x 1 root wheel 618448 Nov 19 00:26 /bin/bash
-rwxr-xr-x 1 root wheel 380016 Feb 7 16:11 /bin/csh
-r-xr-xr-x 1 root wheel 1287040 Sep 21 00:35 /bin/ksh
-r-xr-xr-x 1 root wheel 618512 Nov 19 00:26 /bin/sh
-rwxr-xr-x 1 root wheel 380016 Feb 7 16:11 /bin/tcsh
-rwxr-xr-x 1 root wheel 610288 Sep 21 00:35 /bin/zsh
I've been toying with chef, and may have installed ruby along the way. Now I would like to upgrade to ruby 2.0. Anyhow I'm curious what could have caused ruby to be added to the path of all new users? Note: there's no mention of ruby in the new user's .bashrc, .profile, or in the global /etc/environment:
ubuntu#ip-10-10-10-10:~$ sudo useradd -m testuser
ubuntu#ip-10-10-10-10:~$ sudo su - testuser
testuser#ip-10-10-10-10:~$ ls -la
total 20
drwxr-xr-x 2 testuser testuser 4096 Mar 23 02:54 .
drwxr-xr-x 5 root root 4096 Mar 23 02:54 ..
-rw-r--r-- 1 testuser testuser 220 Apr 9 2014 .bash_logout
-rw-r--r-- 1 testuser testuser 3637 Apr 9 2014 .bashrc
-rw-r--r-- 1 testuser testuser 675 Apr 9 2014 .profile
testuser#ip-10-10-10-10:~$ echo $PATH
/home/testuser/.gem/ruby/1.9.3/bin:/opt/rubies/1.9.3-p429/lib/ruby/gems/1.9.1/bin:/opt/rubies/1.9.3-p429/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
testuser#ip-10-10-10-10:~$ ruby --version
ruby 1.9.3p429 (2013-05-15 revision 40747) [x86_64-linux]
testuser#ip-10-10-10-10:~$ which ruby
/opt/rubies/1.9.3-p429/bin/ruby
testuser#ip-10-10-10-10:~$
I'm at a loss as to where to look to find and remove the references to ruby 1.9.3 being added apparently automatically.
I faced similar issue. Please try with this option dpkg --get-selections.
As you might be knowing everything is considered as gems. Hence try with this also if above does not work...
$ gem -h
or
$rvm list known
and then you can install only the required version using
rvm install ruby 2.0.0-p247
REFERNCE:- http://www.ruby-lang.org/en/downloads/
Turns out somewhere along the way, somehow, chruby got installed. The quick fix to resolve the user PATH not being overwritten was to disable the .sh chruby put in /etc/profile.d:
ubuntu#ip-10-10-10-10:/etc/profile.d$ ls -l
total 16
-rw-r--r-- 1 root root 663 Aug 19 2015 bash_completion.sh
-rw-r--r-- 1 root root 147 Mar 21 00:58 chruby.sh
-rw-r--r-- 1 root root 1559 Jul 29 2014 Z97-byobu.sh
-rwxr-xr-x 1 root root 2691 Nov 23 18:41 Z99-cloud-locale-test.sh
ubuntu#ip-10-10-10-10:/etc/profile.d$ sudo mv chruby.sh chruby.sh.disabled
ubuntu#ip-10-10-10-10:/etc/profile.d$ ls
bash_completion.sh chruby.sh.disabled Z97-byobu.sh Z99-cloud-locale-test.sh
ubuntu#ip-10-10-10-10:/etc/profile.d$ sudo su - testuser
testuser#ip-10-10-10-10:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Better would be to uninstall chruby, but it's not obvious to me how to do that given I don't know / don't remember how it was installed.
On a rMBP here. I'm not sure what the script is that is responsible for doing this. Basically I want to add the path to python utils to the $PATH...
For example, I brewed python brew python in order to get pip, then ran pip install flake8. Now
$ which flake8
flake8 not found
$ find / | grep flake8
...
......
/usr/local/share/python/flake8
$ ls -la /usr/local/share/python/
total 32
drwxr-xr-x 6 lust admin 204 Apr 2 18:15 .
drwxr-xr-x 15 lust admin 510 Apr 2 18:12 ..
lrwxr-xr-x 1 lust admin 45 Apr 2 18:13 Extras -> ../../Cellar/python/2.7.3/share/python/Extras
-rwxr-xr-x 1 lust admin 389 Apr 2 18:15 flake8
-rwxr-xr-x 1 lust admin 385 Apr 2 18:15 pep8
-rwxr-xr-x 1 lust admin 405 Apr 2 18:15 pyflakes
Alright!
$ cat /private/etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ sudo vim /private/etc/paths
$ cat /private/etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/usr/local/share/python
Make a new shell, check $PATH, python not there. Okay.
Reboot, start a new shell, check $PATH, python still not there.
Oh, by the way, the solution is not to append, with anything like export PATH=$PATH:newpath, because I don't actually care to run flake8 from the command-line, I want Sublime Text 3' SublimeLinter plugin to actually know where it is without putting some hacky config in the settings for the editor.
I found the problem. As part of oh-my-zsh, zsh is set up to set PATH in the ~/.zshrc. I failed to consider this. When starting ST3 without using the command line invocation, it gains its own (incorrect) path environment variable, so that part still doesn't work. The ultimate resolution to the problem, however, is here.