PowerShell for Linux
Getting started
These instructions assume Ubuntu 14.04 LTS, the same as our dependency, CoreCLR. Fortunately you do not have to build CoreCLR, as we bundle the dependencies in submodules.
Installing dependencies
Setup the Mono package repository because Ubuntu's Mono packages are out of date.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
sudo apt-get update
Install necessary packages.
- Git, the version control system
- Mono, the C# compiler for Linux
- Nuget, the C# package manager
- libunwind8, used to determine the call-chain
- GCC and G++, for compiling C and C++ native code
- GNU Make, for building
monad-linux - CMake, for building
src/monad-native - Node.js, to run the Visual Studio Online mshttps Git remote helper
- smbclient, to obtain mshttps
- ntpdate, to update the system time
sudo apt-get install git mono-devel nuget libunwind8 gcc g++ make cmake nodejs nodejs-legacy smbclient ntpdate
Obtaining sources
The user name and email must be set to do just about anything with Git. The URL mapping (and mshttps itself) is needed for the two factor authentication that internal VSO imposes.
git config --global user.name "First Last"
git config --global user.email "alias@microsoft.com"
git config --global url.mshttps://msostc.visualstudio.com/.insteadof https://msostc.visualstudio.com/
git config --global url.mshttps://microsoft.visualstudio.com/.insteadof https://microsoft.visualstudio.com/
Install VSO's Git mshttps remote helper, and update the system time (necessary for authentication with VSO).
smbclient --user=domain\\username --directory=drops\\RemoteHelper.NodeJS\\latest \\\\gitdrop\\ProjectJ -c "get git-remote-mshttps.tar.gz"
sudo tar -xvf git-remote-mshttps.tar.gz -C /usr/local/bin
sudo chmod +x /usr/local/bin/git-remote-mshttps
sudo ntpdate time.nist.gov
If the file transfer fails with
tree connect failed: NT_STATUS_DUPLICATE_NAME, usenslookup gitdropto obtain its canonical name (currentlyosgbldarcfs02.redmond.corp.microsoft.com) and use it instead.
Clone our monad-linux source from Visual Studio Online. We use the develop branch, and several submodules, necessitating the arguments.
git clone -b develop --recursive https://msostc.visualstudio.com/DefaultCollection/PS/_git/monad-linux
Building
cd scriptssince it contains theMakefilemake preparewill use Nuget to download several dependenciesmake allwill build PowerShell for Linuxmake runwill execute a demo,"a","b","c","a","a" | Select-Object -Uniquemake run-interactivewill open an interactive PowerShell consolemake testwill execute the unit testsmake cleanwill remove the built objectsmake cleanallwill also remove the Nuget packages