Run newer version of mono without sudo - compilation

I'm on a virtual host with Debian, and it has an outdated version of mono. I do not have sudo privileges. I have compiled an updated version into my home directory with ./configure --prefix=$HOME.
How do I run my programs with the compiled version?

With a prefix of $HOME and assuming you have done a 'make install', add mono's bin dir to your path and test to see you are are picking up the correct/newer one:
export PATH=${HOME}/bin:${PATH}
which mono
At that point, you can:
mono yourprogram.exe
Note: Instead of using your home directory as the prefix, you might want to install to a sub-directory to keep all those mono sub-dirs separate from your other HOME directories; i.e. Use --prefix=$HOME/mono when you autogen/configure mono.

Related

How to run commands in any directory in macOS Terminal?

I have some Unix Executable Files in a paticular directory, say /Users/myUserName/Developer/sdcc/bin/.
I find I must get into this directory using cd before running that command, or it complains zsh: command not found.
But it can be of inconvenience. I know the commands can be used in any directory if it's installed by Homebrew. How can I do the same thing?
Homebrew usually links the necessary executables to /usr/local/bin directory, which should be in your $PATH. Thus, when you execute a command like sdcc, your shell will seek through the $PATH directories, and when it looks at /usr/local/bin, it will find sdcc, follow the link and execute it.
Some packages do not perform this linking, which means you cannot execute them without knowing where they are. You can ask Homebrew to tell you where a package is installed: brew --prefix <formula>, where <formula> is the package name (e.g. brew --prefix sdcc). The executable files will normally be under a bin subdirectory. For example, brew --prefix sdcc would likely tell you something like /usr/local/opt/sdcc; then you can invoke sdcc using /usr/local/opt/sdcc/bin/sdcc, without having to cd there. You could also put /usr/local/opt/sdcc/bin into your $PATH directly, though I do not recommend it. Another alternative is to create your own bin (mine is in $HOME/.local/bin), put it in $PATH, and link there (ln -s <source> $HOME/.local/bin/) any executables you wish your shell to easily find.
However, with Homebrew packages, I strongly suggest you do not try to imitate Homebrew by yourself, by installing things in Homebrew's domain. You can confuse Homebrew and create problems. Instead, let Homebrew do it.
If you need to install a package on a different OS than the one you are downloading at, you may need to first find out the bottle tag for the target (installation) computer. For example, for Big Sur, it is big_sur. See brew info --json <formula>, under bottle.stable.files you should find the bottle tags. Use --bottle-tag <tag> in step 1 and 2 to select the right OS.
Use brew fetch --deps <formula> to download (but not install) a package, including its dependencies. If you use the --verbose flag, Homebrew will tell you where it downloaded each of the files.
If you haven't used --verbose and still want to know where the downloaded files are: brew deps <formula> will list all the packages it depends on. If a package needs to be compiled, you may need to also use the --include-build option. brew --cache <formula> will show you where a package file is downloaded.
If you need to copy a package file to another computer, you should find out where the Homebrew would expect to find it: use brew --cache --force-bottle <formula> on the target computer, and copy the package file there. Don't forget to do that for each dependency package as well.
After that, brew install <formula> will install from cache.
The only part of this process that needs internet connection is the first step, brew fetch.
For Unix (which MacOS is a family member) and Unix-like (eg. Linux) operating systems the thing that controls this feature is the PATH environment variable.
To know which folders allow you to run programs without cd-ing into them or prefix ./ to your program name you can print out the value of PATH:
echo $PATH
On my machine it prints out:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Users/slebetman/bin:/opt/homebrew/bin
There are two things to notice:
The string is a list of folder paths separated by :
There is a path listed as /opt/homebrew. Presumably this is where homebrew installs command-line programs.
Copying your program/script into any of the folders listed in PATH will allow you to use it like any installed/built-in command. This is what it means to install command-line programs on Unix. It's that simple.
There is another thing to notice: I have in my PATH the folder /Users/slebetman/bin. This is my own personal standard - probably not invented by me but one I adopted from my college days - for installing my own programs. I have this ~/bin folder on all my Unix and Linux machines. It is where I keep my personal collection of scripts that I've written or collected over a lifetime.
Having a personal ~/bin folder is nice because you don't need sudo permission to write to it. Also, if you buy a new PC/Mac you can just copy the folder to your new machine and all the scripts you've gotten used to now exist on the new machine. Better yet, you can manage the folder with git and sync it with github/gitlab/bitbucket to make it easy to keep all your computers updated.
Since PATH is a standard environment variable you can easily modify it to add your own folder. Just add the following in your .profile or .zshrc or .bashrc file (depending on your shell) to add your own bin folder to PATH:
export PATH=$PATH:$HOME/bin
The command above simply says add $HOME/bin to PATH and export it so that other programs will inherit the new PATH variable.
In your case you can even do something like:
export PATH=$PATH:/path/to/your/sdcc/bin
to have all your SDCC commands work like regular commands.

Installing Julia v0.5 on Ubuntu 16.04 while v0.6 is installed

I use v0.6, but certain packages do not function with v0.6 (such as Interact.jl). How can I install v0.5? I am running Ubuntu 16.04.
First we have to download the latest Julia version from https://julialang.org/downloads/
I used the “Generic Linux Binaries for x86” version. The choice between x86 and ARM depends on the processor of your machine. Also choose between 32 bit and 64 bit versions based on the operating system and processor you have on your machine.
After download, you will get a compressed tar.gz archive having name similar to “julia-0.6.2-linux-x86_64.tar.gz”. As the “julia-0.6.2-linux-x86_64.tar.gz” name suggests that I downloaded the Julia version 0.6.2 which is latest at the time of writing this.
The names may differ. Adapt the names accordingly.
Remember these are binaries, these don't need to be installed as they can be directly used from the directory they are extracted.
I am assuming that the downloaded file is in your ~/Downloads directory of Ubuntu.
Open the terminal and navigate to the directory where the downloaded tar.gz file is stored, in present case the Downloads directory.
The terminal when just opened will show:
x#xpc:~$
where x should be replaced by your username and xpc should be replaced by your computer name.
Navigate to the Downloads directory using cd Downloads and then press Enter to get following terminal:
x#xpc:~/Downloads $
Extract the tar.gz file using the command
tar -zxvf julia-0.6.2-linux-x86_64.tar.gz
Now a directory with extracted contents will be generated in the same parent directory as of the compressed archive with a name similar to julia-xxxxxxxxxx where xxxxxxxxxx may be a combination of alphabets and numerals.
This is the final directory you need to run the latest Julia version, no installation is needed.
To run Julia, you can directly run using the julia file in location julia-xxxxxxxxxx/bin/julia as discussed below.
Navigate to the bin directory in the extracted directory using
cd /Downloads/julia-xxxxxxxxxx/bin
The terminal will now be like:
x#xpc:~/Downloads/julia-xxxxxxxxxx/bin $
Now run the command ./julia to run julia on the terminal as shown below.
The terminal will now change to julia as presented below. I know the representation is little different here as this is all I can manage to copy from the terminal to present it to you.
julia>
But the problem is that I have to navigate to the directory every time to run Julia.
Many people have discussed on the internet about defining the path and alias through very complex procedures and as I am not a hardcore computer geek, it was really difficult for me to understand.
I came to know about making a soft link.
So I decided to make a soft link to the Julia to run it directly from anywhere with a short command without navigating to the directory containing it.
I always try to do things neatly, so I decided to keep the extracted directory named julia-xxxxxxxxxx in the /opt directory of my system as most of my important programs reside in that.
You need root permissions to copy a file into the /opt directory, so I used the command sudo su and then provided password to get the super user privileges:
x#xpc:~$ sudo su
[sudo] password for x:
root#xpc:/home/x#
Now navigate to the directory presently containing the extracted directory:
root#xpc:/home/x# cd /Downloads/
root#xpc:/home/x/Downloads#
Copy the directory using:
root#xpc:/home/x/Downloads# cp -r julia-xxxxxxxxxx /opt
After the directory is copied to the destination, now we will make the soft link in a directory which is in the system path so that the soft-link can be called from any location to run Julia.
To find out the directories in the system PATH use echo $PATH, you will get a list of paths of directories separated by colon(:) such as /usr/local/bin. You can use any of them. I used /usr/local/bin for the soft link.
Navigate to the chosen folder.
root#xpc:/home/x# cd /usr/local/bin
The terminal will become
root#xpc:/home/x/usr/local/bin#
Create the soft link using
root#xpc:/home/x/usr/local/bin# sudo ln -s /opt/julia-xxxxxxxxxx/bin/julia julia
Now return to the normal user terminal using the keyboard combination Ctrl+D at the empty terminal root#xpc:/home/x/usr/local/bin#.
The terminal prompt will become:
x#xpc:~$
Type the newly made soft link i.e. julia in the terminal as shown below
x#xpc:~$ julia
This is where the magic happens and you get this:
julia>
The instructions can be used for any version of Julia in Ubuntu.
Source
Firstly, you should really read the post that Reza Afzalan linked. It gives you everything you need to know about how to install. If you prefer a list:
Go to the Julia download page.
Download the Generic Linux Binary for your OS (probably 64-bit for Ubuntu 16).
Install it.
Find where the installed Julia binary executables are stored on your machine.
Symlink Julia v0.5 and Julia v0.6 to different aliases, e.g. julia5 and julia6. You can store the symlinks in a directory like /usr/local/bin.
Open julia5.
Start downloading your packages with Pkg.add.
It's very easy, here's how to install it on Linux in 8 steps:
1- go to Julia downloads page
2- Choose you version (32bit or 64bit) from Generic Linux Binaries, and then download it.
3- extract .tar.gz file in home or any place you would like to install Julia on it.
4- run > gksudo gedit /etc/environment on your terminal to setup envirnment path.
5- edit file :/Path_To_extracted_File/bin in my case it was like this:
":/home/okasha/julia-d386e40c17/bin"
6- Save edits and close the file.
7- Restart your machine.
8- Open your terminal again and run > julia -version
you shoud get "julia version 0.6.2" for Example according to your installed julia version.
Run > julia to open julia session.
Reference
Just type this
sudo apt install julia

How can I install pcre-light on OS X without root access?

I'm working on a shared system where I don't have root access, but where the admins have installed the Haskell Platform. Most Cabal packages install perfectly happily, but I need a library with a dependency on pcre-light, which of course depends on the C library pcre. Is there an easy way to install pcre under $HOME so that I can get on with my work?
As it happens, Homebrew works perfectly well from inside $HOME:
http://www.acloudtree.com/how-to-install-the-homebrew-package-management-utility-locally-on-mac-osx/
In short, you can install Homebrew simply by cloning the GitHub repo into $HOME, then adding $HOME/homebrew/bin to your $PATH. Then you can just say:
$ brew install pcre
Then tweak $HOME/.cabal/config like so:
extra-include-dirs: $HOME/homebrew/include
extra-lib-dirs: $HOME/homebrew/lib
(but use the actual directory instead of $HOME). Now cabal install pcre-light should work normally.

NVM for Windows not working?

I just installed NVM for Windows, but it doesn't seem to be working:
Any ideas?
First examine your actual "C:\Program Files\nodejs" directory. Most of us already have a "nodejs" directory from a prior install, before we decided (or were told) to install nvm.
In the end, this "C:\Program Files\nodejs" directory will actually be a shortcut to where nvm manages the versions it installs (see C:\Users\xxx\AppData\Roaming\nvm). It seems that nvm is simply switching the shortcut, when we call "nvm use ...".
Ok, so here is what I did to fix the situation where "nvm use ..." was not taking effect.
Delete/remove/uninstall the version of node in your "C:\Program Files\nodejs" directory. To the point where there is no more "nodejs" directory at all.
Delete the existence of nvm (C:\Users\xxx\AppData\Roaming\nvm), basically, manually delete the nvm dir.
Download your desired version of nvm (https://github.com/coreybutler/nvm-windows/releases)
Open a CMD prompt (run as administrator), and install the downloaded version of nvm, nvm-setup.exe, from within this CMD command prompt.
From within the admin level command prompt, run "nvm install 7.2.1", or whatever node version you want to install. Probably you will be installing multiple versions, so repeat as needed.
Now do the usual "nvm use ...", "nvm list", etc...
I dont know if this is the best way, but it worked for me...
Having the same issue after installing latest node with nvm. node command was not recognized in console. Closing and opening command windows did not work. checked nvm arch to which the response is
C:\WINDOWS\system32> nvm arch
System Default: 64-bit.
Currently Configured: -bit.
Had to set the node again with arch setting
C:\WINDOWS\system32> nvm use 7.4.0 x64
Now using node v7.4.0 (64-bit)
C:\WINDOWS\system32> nvm arch
System Default: 64-bit.
Currently Configured: 64-bit.
C:\WINDOWS\system32> nvm list
* 7.4.0 (Currently using 64-bit executable)
4.5.0
C:\WINDOWS\system32> node -v
v7.4.0
Rename "C:\Program Files\nodejs" to "C:\Program Files\nodejsx"
nvm use x.x.x
This worked for me. Maybe it will work for you too.
Most likely what is happening is that the system %PATH% is being updated outside of the command prompt instance. Only opening a new command prompt will pick up these new external changes.
I had the same problem in Windows 10, and the solution for me was in #pleverett answer in https://github.com/coreybutler/nvm-windows/issues/191
Symptoms: no bit architecture and no default version
C:\WINDOWS\system32> nvm arch
System Default: 64-bit.
Currently Configured: -bit.
C:\WINDOWS\system32> nvm list
8.9.4
6.13.0
Solution:
After uninstalling node, make sure the directory where node was originally installed has been removed and not just empty. For Windows 7 ad 10, 64-bit, the default is "C:\Program Files\nodejs".
If the "nodejs" directory still exists then the "nvm use" command can't make the symbolic link to the node version under nvm's control.
I had the same problem until I manually deleted the "nodejs" directory.
Make sure you delete all old nodejs.
Install nvm
Install node
Open new terminal prompt
run 'nvm on'
run 'nvm list'
run 'node --version'
In my case I was using git bash -- switching to cmd.exe worked.
More suggestions at: https://github.com/coreybutler/nvm-windows/issues/58
I had to manually set the PATH variable in System environment variables of Windows to fix this issue.
Here are the steps:
Before installing nvm, delete the following path:
C:\Program Files\nodejs
C:\Program Files (x86)\nodejs
after installing nvm execute:
nvm use
After the use command you can find a shortcut 'C:\Program Files\nodejs' is created by
nvm in this path.
The problem i found was the path 'C:\Program Files\nodejs' was not set in the windows system evnironment PATH variable.
i appended 'C:\Program Files\nodejs' to the %PATH% variable to fix this issue.
I had to open the installer with admin permissions.
Then I opened the command line and I was able to install and use nvm properly.
nvm install 10.0.0
nvm use 10.0.0
node --version
// version 10 is used.
I installed nvm-windows in order to get multiple versions of node to work. After installation I got the error that most folks complained about which is that it was unable to find the file settings.txt. There are two things required to get nvm-win to work and the installer only does the first of these two. So after installation just check that points 1 and 2 are covered and you should be good. There is no need to uninstall prior versions of node as far as i can tell.
update the system path variable to the directory where you installed nvm and where the nvm.exe is located. ex. c:\nvm
add a new variable NVM_HOME to the system variables.
open a new command window after verifying 1 and 2.
Problem 2 switching between versions
Switching between versions gives a success message but it will not actually work properly unless you manually update the windows system path variable to point to the location that you installed your target version in, for example C:\Users\adamm>nvm list
10.15.1
* 6.4.0 (Currently using 64-bit executable)
So it appears to work but if you type node -v it will show whichever version is currently in your path variable until you edit the path variable to use 6.4.0
I was getting the same issue. I installed node using nvm but 'node' and 'npm' were not recognized by the system.
So, what I did was I didn't delete any folders or anything I just ran the command prompt as administrator and did the nvm install 'desired-version' and everything started to work fine.
I understand this is an old question.
However, what fixed it for me isn't in any of the answers above, which is why I decided to answer this in case new persons find this page and none of the above answer works for them...
All I had to do was run nvm on which creates the symlink (supposedly, nvm use <version> is supposed to work, but it wasn't), turning on nvm before using a version worked for me.
Steps:
nvm install <version> -> Installs a node and npm of <version>
nvm on -> Turns on nvm, and creates the nodejs symlink needed
nvm use <version> -> To use a specific version
node -v -> prints out version of node
npm -v -> prints out version of npm
Hopefully, it fixes your issue too.
For me,
nvm list
Then I remove v8.9.4 folder out of nvm.
After that:
nvm list
Then, I move v8.9.4 back.
For me it was I installed node using nvm on a non-admin cmd.
Running cmd as admin worked for me.
open a new cmd with admin rights then run this command.
run 'nvm on'
Why isn't node version changing with nvm for windows even when nvm on ?
when nodejs is already installed, the enviroment variable NVM_SYMLINK which created when nvm for windows is installed will point to C:\Program Files\nodejs(which is default)
what is the expected behavior ?
when we run nvm on and then nvm use x.x.x, we should able to switch to the desired node version without any hassle.
how to fix ?
uninstall the nodejs using uninstall/remove programs from control panel and delete C:\Program Files\nodejs if exists
check (once) if NVM_SYMLINK in environment variables is changing automatically when running nvm use x.x.x
if not changing automatically then uninstall and reinstall nvm for windows (remove any other node remains)
Note: I am able to switch to the desired versions of node by changing the user environment variable NVM_SYMLINKto C:\Users\Charlie\AppData\Roaming\nvm\vx.x.x without uninstalling the node.
At my work we are assigned a user account and an administrative account which we use to install and manage software for our machines. NVM was installed under this admin account and therefore, none of the answers above worked for me.
I had to manually add %NVM_HOME% and %NVM_SYMLINK% to my user account's path before I could get node --version to display anything.
So if you have to deal with a regular account and an administrative account then the following will work for you:
Install NVM (which will have to be installed using your admin account)
Manually added %NVM_HOME% and %NVM_SYMLINK% to your user account's path (if you check your admin account's path you'll see these 2 were added there during the NVM installation)
nvm install latest
nvm on
nvm use x.x.x
Restart computer so your IDE recognizes the changes
$Profit$
To me the issue was that I had problems with the download, I had to download the zip file manually and place its contents int he nvm folder C:\Users\xxx\AppData\Roaming\nvm
Try nvm run node --version
You can also get the path to the executable to where it was installed:
nvm which 5.0
Something that fixed it for me: Comb through your PATH variable. I had multiple links to different node versions and it worked perfectly after I cleaned up all of them, leaving NVM's variables in tact.
If executing where node comes back with more than one path this is likely your issue.
This work fine for me:
In the C:\Program Files\ folder use cmd to run mklink /D /J nodejs C:\Users\[user]\AppData\Roaming\nvm[node version]
Please note that cmd run in administrator mode.
Detail here: https://github.com/coreybutler/nvm-windows/issues/321#issuecomment-407876718
For me, the issue was that I was using the nosetup way and downloaded the zip in my user Downloads folder. When I switched to setup installer, it worked for me.
You need Administrator access for installing node. Since you got into problem before knowing solution, follow below step.
Note down all installed node version(Optional)
"C:\Program Files\nodejs" (Optional but Recommended)
Delete "C:\Users\xxx\AppData\Roaming\nvm"
Reinstall nvm
Run cmd as Administrator
nvm install x.x.x
I had same issue. C:\Program Files\nodejs shortcut folder was present but was not pointing to anywhere.
I simply deleted the C:\Program Files\nodejs symlink and executed the below command
nvm use 0.10.36
This created new C:\Program Files\nodejs symlink and it worked properly.
Aside to all other solutions described here, there is another issue with nvm. Nvm switches between version of Node.js. Node.js builds are grabbed from Node.js repository.
If you can switch between some versions, but not all, and specifically you can not switch to versions you just grabbed, that answer is for you.
The situation happens because Node.js rebuilds old builds. For example, there is a build 10.14.1 you can grab from their repository, and that nvm grabs. But it is not a build from the past. Node.js rebuilds old builds too regularly.
Unfortunately, they don't take care about backwards compatibility. It means that if your operating system is not supported by Node.js, not only the latest build won't be supported. All old builds will also be broken for your system.
Currently, Node.js supports Windows 10+. It means that all old Node.js packages has been rebuilt in a way, that break them for Windows 8.x and Windows 7.
What is astonishing, there is no place to grab the old, working builds. Once they rebuild old releases, they break backwards compatibility.
As for now, there is no solution for that. The only thing you can do, is to grab releases while they are supported on your system. For example now, you can grab versions for Windows 10, because when they announce Windows 11 is a minimum requirement, all Node.js builds will break on Windows 10.
From the nvm perspective, you can see any kind of errors during the installation. During switching the visible result is that you can not switch between versions. The version you choose is not the current one and not marked with an asterix in the npm list result.
For me there were 2 things I needed to do:
Run nvm install as administrator
Specify the exact version (major.minor.point) with nvm use
Steps:
Open Terminal as Administrator
Run nvm install 14
Run nvm use 14.20.0
Open Terminal as non-admin
Run node -v to verify it's using 14.20.0
If I tried nvm use 14 without minor or point version, it did not work, which differs from NVM on Mac. I also could not run nvm use in a non-admin terminal, it gave "Access is denied".
For me deleting npm and npm-cache folder from AppData works
For me running nvm install 14.0.0 from PowerShell with admin rights did the job.
You must delete your C:\Program Files\nodejs directory.
Check the version of the node available with nvm list.
If you have your version, run command nvm use x.x.x.
otherwise run nvm install x.x.x and run command nvm use x.x.x.
For me setting up environment path variable also didn't work. Finally I got the cause and it was incompatible node version, once I downgraded my node from 14 to version used in my frontend application i.e. v8.11.3, it worked for me.

Whats the best way to install nodejs in different location

By default nodejs is installed in /usr/local/bin/node but this location needs root access rights.
If I then install a global package like grunt-cli or a yeoman generator they also need root access rights. But I don't want to install all global packages with sudo.
So I tought why not install node and its global packages under something like opt/bin/node for example and give this location user access rights.
I used to download the installer from the nodejs website but with that I can't change location of the installation. So the question is:
How can I install nodejs in a differnt location than the default location on OSX and Windows?
Search engines are your friend.
Taken directly from the node docs:
On Windows
The http://nodejs.org/dist/latest/ directory contains executables of
the last version of Node.js engine (the engine only, i.e. without
npm):
32bit version: http://nodejs.org/dist/latest/node.exe
64bit version: http://nodejs.org/dist/latest/x64/node.exe
The http://nodejs.org/dist/npm/ directory contains the latest .zip
archive of npm (such as npm-1.1.16.zip when npm v1.1.16 was the
latest).
Manual installation steps:
Make a clean directory and add that directory to your system's PATH variable.
Download the latest node.exe to that directory.
Download the latest npm's .zip file and unpack its contents to the same directory.
Then, with the usual help of PATH, you'll be able to run scripts (node
scriptname.js) and install modules (npm install modulename) in any
directory.
...and just below that...
Installing on Mac
The http://nodejs.org/dist/latest/ directory contains the latest .pkg
package (such as node-v0.6.15.pkg when Node v0.6.15 was the latest).
we have discussed your issue with some unix guru´s.
in UNIX / MAC:
we believe the best way to install a node package "global" (non-project-specific respectively in your user environment) is to install node in folder
/opt/node or /home/user/.node and change the user-right, as you mentioned.
we believe its the wrong way, to change the /usr/ folder-rights or install global-packages with sudo.
in my case, i think the solution to change npm-config (mentioned in many other stackoverflow topics) did not changed anything, because node is still installed in /usr/bin.
still we belief, as a developer its more recommended to build such frequently updated applications like node by yourself instead of using the unix package manager. because mostly the resources ain't up to date.
I've had great success with nvm: https://github.com/creationix/nvm. It's a version manager for node, but one of the best parts of it (for me) is that it installs each version of node in your home directory. This means that your npm global install is also in this home directory. It's a Mac/Unix solution.
For Windows, though I've never tried it, there is the (similar) nvmw project: https://github.com/hakobera/nvmw.

Resources