# [Guide] Developing on Windows 10 using WSL

**URL:** https://discourse.roots.io/t/guide-developing-on-windows-10-using-wsl/9380
**Category:** general
**Created:** 2017-04-13T22:45:36Z
**Posts:** 25

## Post 1 by @Log1x — 2017-04-13T22:45:36Z

With the release of the Creators update, WSL now has proper networking, 60%+ better support for Linux system calls, and the best feature of all: the ability to execute Windows native executables. You can read more about this [here](https://blogs.msdn.microsoft.com/commandline/2017/04/11/windows-10-creators-update-whats-new-in-bashwsl-windows-console/).

Here’s a couple tips on settings this up for web development, including Trellis.

**mintty**

First of all, I recommend using mintty as a terminal. You can install it using the instructions on the [wsltty](https://github.com/mintty/wsltty) repo.

You can check out various other terminals such as [cmder](http://cmder.net/) and [Hyper](https://github.com/zeit/hyper) which both support tabs, but for now, wsltty provides a nice drop-in replacement to the default.

**zsh**

Most people prefer `zsh` over `bash`. If you’re interested, let’s set that up real quick before we get started.

`sudo apt-get install zsh`

While there are alternatives, I’ve never had any issues with [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh) and the plugin support is great. Let’s grab that real quick too…

`sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"`

While normally we’d be able to simply use `chsh zsh` to change our shell to zsh, `/etc/passwd` appears to be ignored at the moment for the default shell and I’m sure will be addressed in the future.

For now, we will add the following lines to `~/.bashrc` to `exec zsh` on start:

`nano ~/.bashrc`

```
# Launch Zsh
if [-t 1]; then
    exec zsh
fi
```
[![](https://log1x.com/screenshots/2017-04-13_22-48-28_Q1SL8.png) ](https://log1x.com/screenshots/2017-04-13_22-48-28_Q1SL8.png)

Once we do that, restart Bash and we should be on our way. After setting up the below, make sure to check out the massive amount of [Plugins](https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins) and [Themes](https://github.com/robbyrussell/oh-my-zsh/wiki/Themes) for oh-my-zsh.

**PHP**

An important part of keeping your workflow native and sane is getting a proper installation of PHP 7.1 running locally to allow usage of wp-cli and Composer.

Let’s set that up.

**PHP 7.1**

```
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.1 php7.1-mbstring php7.1-xml
```

**Composer**

`curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer`

**wp-cli**

```
cd ~ && curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
```

**Node.js**

The next step will be a proper installation of node.js and yarn. We will do this using `nvm`.

`curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash`

After installing `nvm`, you will need to source it in your `~/.bashrc` or `~/.zshrc`.

```
if [-r ~/.nvm]; then
  export NVM_DIR="$HOME/.nvm"
  [-s "$NVM_DIR/nvm.sh"] && . "$NVM_DIR/nvm.sh"
fi
```

After doing that, if it’s setup properly, we should get a version response from nvm.

[![](https://log1x.com/screenshots/2017-04-13_18-23-39_g1Km8.png) ](https://log1x.com/screenshots/2017-04-13_18-23-39_g1Km8.png)

Great.

Let’s go ahead and install the latest version of node and set it as our default version.

```
nvm install node
nvm use node
nvm alias default node
```

Now we can go ahead install yarn globally.

`npm install --global yarn`

**rbenv**

This can sometimes be preference vs using [rvm](https://rvm.io/), but I opted for [rbenv](https://github.com/rbenv/rbenv) due to the reasons listed [here](https://github.com/rbenv/rbenv/wiki/Why-rbenv%3F) as well as it working as I need it too without any overhead.

To prepare for building Ruby, let’s start with a couple packages to make our life easier.

`sudo apt-get install build-essential gcc zlib1g-dev zip`

Now let’s get rbenv cloned to our home directory along with the [ruby-build](https://github.com/rbenv/ruby-build) plugin:

```
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
```

and at this point, we should be able to compile rbenv’s dynamic bash extension to speed things up a bit:

`cd ~/.rbenv && src/configure && make -C src`

Like we did with `nvm`, we need to source rbenv in our `~/.bashrc` or `~/.zshrc` file.

```
if [-r ~/.rbenv/bin]; then
  export PATH=$HOME/.rbenv/bin:$PATH
  eval "$(rbenv init -)"
fi
```

**Ruby**

Now that we have rbenv installed, we can install Ruby.

At the point of writing this, 2.3.3 is the latest so lets go with that.

`rbenv install 2.2.3`

This can sometimes take a few. If it errors out complaining about dependencies, it usually has a convenient `apt-get` that you can copy and paste to grab them.

Once it is installed, let’s set it as our default version globally.

`rbenv global 2.3.3`

and we should be set. Let’s check `ruby -v` just to make sure.

[![](https://log1x.com/screenshots/2017-04-13_22-38-35_0CJR7.png) ](https://log1x.com/screenshots/2017-04-13_22-38-35_0CJR7.png)

Looks good.

**Vagrant**

As much as I’d love for it to be, using the Ubuntu package for Vagrant is just not sane yet. While there are numerous, albeit tedious ways to get it working, it is still no where near as functional as the native Windows version and to avoid the issue all together, we’re going to simply make an alias so `vagrant` actually points to `vagrant.exe` which if you added Vagrant to your PATH during installation like you should have, will work quite well.

[![](https://log1x.com/screenshots/2017-04-13_18-48-55_uwD30.png) ](https://log1x.com/screenshots/2017-04-13_18-48-55_uwD30.png)

**Symlinks**

Also added in the Windows 10 Creators update is the ability to create proper Symlinks.

While these are personal preference, I suggest making a few handy symlinks in your WSL users home directory.

[![](https://log1x.com/screenshots/2017-04-13_18-35-49_Tot11.png) ](https://log1x.com/screenshots/2017-04-13_18-35-49_Tot11.png)

Here are some examples of doing this:

```
ln -s /mnt/c/Users/YOURUSERNAME/Desktop ~/desktop
ln -s /mnt/d/Development ~/dev
ln -s /mnt/d ~/storage
ln -s /mnt/d/Downloads ~/downloads
```

Now, assuming you have some type of organization with all of your projects, we can simply `cd ~/dev` and off we go.

**Additional Packages**

Here are some packages I recommend grabbing with `sudo apt-get install`.

`screen`  
`subversion`  
`htop`  
`dos2unix`

Or for those who just want to take my word for it and blindly install them all:

`sudo apt-get install screen subversion htop dos2unix`

**Conclusion**

I realize some of the things above are personal preference, but I thought this would be a decent starter point for those who are interested in getting up and going with WSL and ditching our old ways of relying on Cygwin/Babun.

I plan on updating this post with additional information as I find the time for it and as I stumble upon things. I’m only about a day and a half into switching to Windows 10 but I’m quite happy with it now that WSL is usable.

I will work on cleaning up my dotfiles and pushing my new configuration to GitHub. Please, if you lurk on me, do not use the dotfiles currently on my GitHub. They are not “WSL-ready” and may cause some annoyances.

[![](https://log1x.com/screenshots/2017-04-13_19-19-18_gzPg3.png) ](https://log1x.com/screenshots/2017-04-13_19-19-18_gzPg3.png)

**[Edit]**

- Added a guide for rbenv.
- Added a guide to install zsh and oh-my-zsh

---

## Post 2 by @kalenjohnson — 2017-04-13T22:52:39Z

This is very nice, thanks for posting it! I agree, the Creators update has gotten WSL so close to being perfect.

Being able to run Windows apps was one of the main deterrents I had experienced with it previously and kept me using Cmder (personal preference, but it’s awesome, and I am actually using WSL via Cmder so I can still have multiple windows, etc).

Only gotcha I’ve ran into now is `vagrant ssh`, I’m experiencing the same issue as Jeff Geerling: [https://www.jeffgeerling.com/blog/2017/using-ubuntu-bash-windows-creators-update-vagrant](https://www.jeffgeerling.com/blog/2017/using-ubuntu-bash-windows-creators-update-vagrant)

I’m betting that there will be a solution for that soon enough as well.

---

## Post 3 by @Log1x — 2017-04-14T02:14:13Z

I think I ran into another small issue which I’m surprised I can’t find anyone talking about on Google.

I was unable to use BrowserSync due to `/etc/hosts` not being in sync with Windows’ host file so when it goes to `proxy` my internal host for my Trellis box, it’s unable to resolve it.

`cat /mnt/c/Windows/System32/drivers/etc/hosts | grep 192.* | sudo tee -a /etc/hosts`

I wrote that just now which is a dirty workaround for this. I’m sure it could be made into a script or something to be included in a `~/.bashrc` or `~/.zshrc` – but I’m more so curious on any of your guys’ take on a more sane solution?

1 thing to consider is by default, WSL’s `/etc/hosts` resets it’s self to default when a new instance is made. See [Issue #398](https://github.com/Microsoft/BashOnWindows/issues/398) on the BashOnWindows repo.

This can be rectified by removing:

`# This file was automatically generated by WSL. To stop automatic generation of this file, remove this line.`

at the top of the `/etc/hosts` file.

Another thing to note is this has been brought up as an Issue, but doesn’t seem to of been escalated or pushed in any way. See: [Issue #149](https://github.com/Microsoft/BashOnWindows/issues/149).

Another small thing to watch for is:

`Couldn't open browser (if you are using BrowserSync in a headless environment, you might want to set the open option to false)`

I was able to fix this by adding, in my case, Firefox to Windows PATH and then setting:

`browser: 'firefox.exe'`

in BrowserSync’s [options](https://www.browsersync.io/docs/options).

**Edit** : Looks like this is being worked on [internally](https://www.reddit.com/r/bashonubuntuonwindows/comments/65fav1/syncing_windows_hosts_file_to_etchosts/dg9vshn/?st=j1jpt8on&sh=b2037919).

---

## Post 4 by @Log1x — 2017-04-14T02:58:11Z

Added a few more simple guides for installing zsh and rbenv.

If anyone has any other suggestions, let me know.

---

## Post 5 by @jolaurin — 2017-05-11T19:16:16Z

Thanks a bunch for this guide!

---

## Post 6 by @DavidSchargel — 2017-05-15T03:50:07Z

It looks like [Vagrant recently merged](https://github.com/mitchellh/vagrant/pull/8570) full support for running `vagrant` native inside WSL. :slight_smile:

---

## Post 7 by @kalenjohnson — 2017-06-28T16:00:05Z

> [@Log1x](#):
>
> cat /mnt/c/Windows/System32/drivers/etc/hosts | grep 192.\* | sudo tee -a /etc/hosts

Thanks for this, was just trying to get Browsersync working and this is a quick fix. Hopefully WSL will sync or at least update from the Windows hosts file eventually.

---

## Post 9 by @Log1x — 2017-07-25T02:03:53Z

I’m working on a rewrite of this guide including setting up Valet for seamless development on Windows using Acrylic DNS to manage wildcard hosts (i.e. \*.dev automatically pointing to localhost and resolving with no extra setup). It’s a breath of fresh air in the Windows world.

Stay tuned.

---

## Post 10 by @gk01 — 2017-08-11T09:52:21Z

just curious but why is the only way to install php 7.1 via some random git repository??

---

## Post 11 by @Log1x — 2017-08-11T10:12:32Z

Ondřej just happens to run the official unofficial repository for PHP and has for years. Ubuntu is not a bleeding edge distro thus its packages are usually out of date to maintain “stability”.

An alternative would be to use a distro like Arch Linux for your subsystem instead.

---

## Post 12 by @gk01 — 2017-08-11T18:22:04Z

hm… but windows automatically installed ubuntu -.- i did manage to get php 7 via sudo apt-get install php

---

## Post 13 by @kalenjohnson — 2017-08-11T20:59:29Z

Yes, Ubuntu is the default. It’s a sensible default…

---

## Post 14 by @gk01 — 2017-08-11T23:00:00Z

the process was automatically handled by windows, though. how could have i installed a different distro?

---

## Post 15 by @gk01 — 2017-08-11T23:02:17Z

how come linux files aren’t updated after creating a symbolic link to a windows folder and updating files on windows? how can i achieve this?

---

## Post 16 by @kalenjohnson — 2017-08-11T23:17:57Z

We really appreciate when someone takes time to create a guide for Roots users here. However, this forum isn’t for general debugging or general questions, we do want to keep it Roots focused. Questions about how to use WSL separate from WordPress and web development would be much better asked and answered on WSL support forums.

---

## Post 17 by @gk01 — 2017-08-11T23:30:31Z

Can you point me in the right direction? Where can I find those forums? It’s been so incredibly difficult finding any relevant information via Google.

---

## Post 18 by @kalenjohnson — 2017-08-11T23:43:55Z

> [@gk01](#):
>
> Can you point me in the right direction? Where can I find those forums? It’s been so incredibly difficult finding any relevant information via Google.

[https://github.com/Microsoft/BashOnWindows](https://github.com/Microsoft/BashOnWindows)

> **[What is Windows Subsystem for Linux](https://learn.microsoft.com/en-us/windows/wsl/about)**
>
> Learn about the Windows Subsystem for Linux, including the different versions and ways you can use them. Microsoft Loves Linux.

[https://blogs.msdn.microsoft.com/wsl/](https://blogs.msdn.microsoft.com/wsl/)  
[https://stackoverflow.com/questions/tagged/wsl](https://stackoverflow.com/questions/tagged/wsl)  
[https://askubuntu.com/questions/tagged/wsl](https://askubuntu.com/questions/tagged/wsl)  
[https://www.reddit.com/r/bashonubuntuonwindows/](https://www.reddit.com/r/bashonubuntuonwindows/)

---

## Post 19 by @gk01 — 2017-08-12T04:16:49Z

thanks!! i will be bookmarking your post. i figured out what the issue was. for some reason i could not include a dash in the filename of a CSS file which was referenced by a PHP file, otherwise modifications to the CSS file would not show up in the browser :confused:

---

## Post 20 by @elstamey — 2018-02-01T01:11:46Z

Thank you so much for this. It helped me install composer and php. But when I was using composer install, it was working really slowly, saying it couldn’t find zip extension or unzip, so I added php-zip and unzip for it to run MUCH more smoothly!

> sudo apt-get install php7.2 php7.2-mbstring php7.2-xml php7.2-zip  
> sudo apt-get install unzip

I had another issue with node, when I used ‘npm start’ it couldn’t find the node-sass library. I think it wasn’t in /usr/bin and that was causing an issue. Using these commands (in this github comment) helped me resolve it.

> <https://github.com/Microsoft/WSL/issues/1512#issuecomment-303517504>
>
> When running "npm" from bash, I get the following error:
> ```
> richard@RICH-HOME…:/mnt/c/Users/Richard$ npm
> : not foundram Files/nodejs/npm: 3: /mnt/c/Program Files/nodejs/npm:
> : not foundram Files/nodejs/npm: 5: /mnt/c/Program Files/nodejs/npm:
> /mnt/c/Program Files/nodejs/npm: 6: /mnt/c/Program Files/nodejs/npm: Syntax error: word unexpected (expecting "in")
> ```
> * Your Windows build number
> - Windows 10 Pro Insider Preview / Build 14965
> 
> * Steps / All commands required to reproduce the error from a brand new installation 
> 
> * Strace of the failing command
> ```
> richard@RICH-HOME:/mnt/c/Users/Richard$ strace npm                                                                                                                              
> execve("/mnt/c/Program Files/nodejs/npm", ["npm"], [/* 15 vars */]) = 0                                                                                                         
> brk(0) = 0x7fffd3e7a000                                                                                                                        
> access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)                                                                                                 
> mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff28e0b0000                                                                                       
> access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)                                                                                                 
> open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3                                                                                                                                
> fstat(3, {st_mode=S_IFREG|0644, st_size=18732, ...}) = 0                                                                                                                        
> mmap(NULL, 18732, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7ff28e0b2000                                                                                                                
> close(3) = 0                                                                                                                                     
> access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)                                                                                                 
> open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3                                                                                                                 
> read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P \2\0\0\0\0\0"..., 832) = 832                                                                                           
> fstat(3, {st_mode=S_IFREG|0755, st_size=1840928, ...}) = 0                                                                                                                      
> mmap(NULL, 3949248, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7ff28da30000                                                                                      
> mprotect(0x7ff28dbea000, 2097152, PROT_NONE) = 0                                                                                                                                
> mmap(0x7ff28ddea000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1ba000) = 0x7ff28ddea000                                                            
> mmap(0x7ff28ddf0000, 17088, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7ff28ddf0000                                                                  
> close(3) = 0                                                                                                                                     
> mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff28e0a0000                                                                                       
> mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7ff28e090000                                                                                       
> arch_prctl(ARCH_SET_FS, 0x7ff28e090740) = 0                                                                                                                                     
> mprotect(0x7ff28ddea000, 16384, PROT_READ) = 0                                                                                                                                  
> mprotect(0x7ff28e41b000, 8192, PROT_READ) = 0                                                                                                                                   
> mprotect(0x7ff28e022000, 4096, PROT_READ) = 0                                                                                                                                   
> munmap(0x7ff28e0b2000, 18732) = 0                                                                                                                                     
> getpid() = 86                                                                                                                                    
> rt_sigaction(SIGCHLD, {0x7ff28e212460, ~[RTMIN RT_1], SA_RESTORER, 0x7ff28da66cb0}, NULL, 8) = 0                                                                                
> geteuid() = 1000                                                                                                                                  
> brk(0) = 0x7fffd3e7a000                                                                                                                        
> brk(0x7fffd3e9b000) = 0x7fffd3e9b000                                                                                                                        
> getppid() = 83                                                                                                                                    
> stat("/mnt/c/Users/Richard", {st_mode=S_IFDIR|0777, st_size=0, ...}) = 0                                                                                                        
> stat(".", {st_mode=S_IFDIR|0777, st_size=0, ...}) = 0                                                                                                                           
> open("/mnt/c/Program Files/nodejs/npm", O_RDONLY) = 3                                                                                                                           
> fcntl(3, F_DUPFD, 10) = 10                                                                                                                                    
> close(3) = 0                                                                                                                                     
> fcntl(10, F_SETFD, FD_CLOEXEC) = 0                                                                                                                                     
> rt_sigaction(SIGINT, NULL, {SIG_DFL, [], SA_RESTORER, 0x7f5c3c426cb0}, 8) = 0                                                                                                   
> rt_sigaction(SIGINT, {0x7ff28e212460, ~[RTMIN RT_1], SA_RESTORER, 0x7ff28da66cb0}, NULL, 8) = 0                                                                                 
> rt_sigaction(SIGQUIT, NULL, {SIG_DFL, [], SA_RESTORER, 0x7f5c3c426cb0}, 8) = 0                                                                                                  
> rt_sigaction(SIGQUIT, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7ff28da66cb0}, NULL, 8) = 0                                                                                       
> rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], SA_RESTORER, 0x7f5c3c426cb0}, 8) = 0                                                                                                  
> rt_sigaction(SIGTERM, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7ff28da66cb0}, NULL, 8) = 0                                                                                       
> read(10, "#!/bin/sh\r\n(set -o igncr) 2>/dev"..., 8192) = 867                                                                                                                   
> clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7ff28e090a10) = 87                                                                   
> wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 2}], 0, NULL) = 87                                                                                                                
> --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=87, si_status=2, si_utime=0, si_stime=0} ---                                                                          
> rt_sigreturn() = 87                                                                                                                                    
> stat("/usr/local/sbin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                              
> stat("/usr/local/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                               
> stat("/usr/sbin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                                 
> stat("/usr/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                                 
> stat("/sbin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                                 
> stat("/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                                 
> stat("/usr/games/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                                 
> stat("/usr/local/games/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                             
> stat("/mnt/c/Program Files/ConEmu/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                  
> stat("/mnt/c/Program Files/ConEmu/ConEmu/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                           
> stat("/mnt/c/ProgramData/Oracle/Java/javapath/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                      
> stat("/mnt/c/Program Files (x86)/Razer Chroma SDK/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                              
> stat("/mnt/c/Program Files/Razer Chroma SDK/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                    
> stat("/mnt/c/Windows/System32/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                      
> stat("/mnt/c/Windows/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                               
> stat("/mnt/c/Windows/System32/wbem/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                 
> stat("/mnt/c/Windows/System32/WindowsPowerShell/v1.0/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                               
> stat("/mnt/c/ProgramData/chocolatey/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                            
> stat("/mnt/c/Program Files/Java/jdk1.8.0_112/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                   
> stat("/mnt/c/Program Files (x86)/Skype/Phone/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                       
> stat("/mnt/c/Program Files/Microsoft SQL Server/120/Tools/Binn/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                     
> stat("/mnt/c/Program Files/Microsoft SQL Server/130/Tools/Binn/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                     
> stat("/mnt/c/Program Files (x86)/Microsoft Emulator Manager/1.0/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                    
> stat("/mnt/c/Program Files (x86)/Windows Kits/10/Windows Performance Toolkit/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                       
> stat("/mnt/c/Program Files/Microsoft/Web Platform Installer/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                        
> stat("/mnt/c/Program Files/Microsoft DNX/Dnvm/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                      
> stat("/mnt/c/Program Files/Microsoft SQL Server/Client SDK/ODBC/130/Tools/Binn/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                     
> stat("/mnt/c/Program Files (x86)/Microsoft SQL Server/130/Tools/Binn/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                               
> stat("/mnt/c/Program Files/Microsoft SQL Server/130/DTS/Binn/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                       
> stat("/mnt/c/Program Files/TortoiseGit/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                         
> stat("/mnt/c/Program Files/Seq/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                     
> stat("/mnt/c/Program Files/Git/cmd/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                 
> stat("/mnt/c/Program Files/nodejs/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                  
> stat("/mnt/c/Program Files/dotnet/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                  
> stat("/mnt/c/Windows/System32/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                      
> stat("/mnt/c/Windows/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                               
> stat("/mnt/c/Windows/System32/wbem/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                 
> stat("/mnt/c/Windows/System32/WindowsPowerShell/v1.0/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                               
> stat("/mnt/c/Program Files (x86)/Yarn/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                          
> stat("/mnt/c/Users/Richard/.dnx/runtimes/dnx-clr-win-x86.1.0.0-rc1-update2/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                     
> stat("/mnt/c/Users/Richard/AppData/Local/Microsoft/WindowsApps/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                     
> stat("/mnt/c/Program Files (x86)/Microsoft VS Code/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                             
> stat("/mnt/c/Users/Richard/AppData/Local/.meteor/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                   
> stat("/mnt/c/tools/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                                 
> stat("/mnt/c/Users/Richard/AppData/Roaming/npm/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                     
> stat("/mnt/c/Users/Richard/AppData/Local/Microsoft/WindowsApp/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                      
> write(2, "/mnt/c/Program Files/nodejs/npm:"..., 69/mnt/c/Program Files/nodejs/npm: 3: /mnt/c/Program Files/nodejs/npm: ) = 69                                                   
> : not found) = 122                                                                                                                                                    
> write(2, "\n", 1                                                                                                                                                                
> ) = 1                                                                                                                                                     
> pipe([3, 4]) = 0                                                                                                                                     
> clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7ff28e090a10) = 88                                                                   
> close(4) = 0                                                                                                                                     
> read(3, "/mnt/c/Program Files/nodejs\n", 128) = 28                                                                                                                              
> --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=88, si_status=0, si_utime=0, si_stime=0} ---                                                                          
> rt_sigreturn() = 28                                                                                                                                    
> read(3, "", 128) = 0                                                                                                                                     
> close(3) = 0                                                                                                                                     
> wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 88                                                                                                                
> stat("/usr/local/sbin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                              
> stat("/usr/local/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                               
> stat("/usr/sbin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                                 
> stat("/usr/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                                 
> stat("/sbin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                                 
> stat("/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                                 
> stat("/usr/games/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                                 
> stat("/usr/local/games/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                             
> stat("/mnt/c/Program Files/ConEmu/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                  
> stat("/mnt/c/Program Files/ConEmu/ConEmu/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                           
> stat("/mnt/c/ProgramData/Oracle/Java/javapath/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                      
> stat("/mnt/c/Program Files (x86)/Razer Chroma SDK/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                              
> stat("/mnt/c/Program Files/Razer Chroma SDK/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                    
> stat("/mnt/c/Windows/System32/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                      
> stat("/mnt/c/Windows/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                               
> stat("/mnt/c/Windows/System32/wbem/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                 
> stat("/mnt/c/Windows/System32/WindowsPowerShell/v1.0/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                               
> stat("/mnt/c/ProgramData/chocolatey/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                            
> stat("/mnt/c/Program Files/Java/jdk1.8.0_112/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                   
> stat("/mnt/c/Program Files (x86)/Skype/Phone/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                       
> stat("/mnt/c/Program Files/Microsoft SQL Server/120/Tools/Binn/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                     
> stat("/mnt/c/Program Files/Microsoft SQL Server/130/Tools/Binn/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                     
> stat("/mnt/c/Program Files (x86)/Microsoft Emulator Manager/1.0/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                    
> stat("/mnt/c/Program Files (x86)/Windows Kits/10/Windows Performance Toolkit/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                       
> stat("/mnt/c/Program Files/Microsoft/Web Platform Installer/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                        
> stat("/mnt/c/Program Files/Microsoft DNX/Dnvm/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                      
> stat("/mnt/c/Program Files/Microsoft SQL Server/Client SDK/ODBC/130/Tools/Binn/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                     
> stat("/mnt/c/Program Files (x86)/Microsoft SQL Server/130/Tools/Binn/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                               
> stat("/mnt/c/Program Files/Microsoft SQL Server/130/DTS/Binn/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                       
> stat("/mnt/c/Program Files/TortoiseGit/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                         
> stat("/mnt/c/Program Files/Seq/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                     
> stat("/mnt/c/Program Files/Git/cmd/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                 
> stat("/mnt/c/Program Files/nodejs/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                  
> stat("/mnt/c/Program Files/dotnet/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                  
> stat("/mnt/c/Windows/System32/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                      
> stat("/mnt/c/Windows/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                               
> stat("/mnt/c/Windows/System32/wbem/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                 
> stat("/mnt/c/Windows/System32/WindowsPowerShell/v1.0/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                               
> stat("/mnt/c/Program Files (x86)/Yarn/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                          
> stat("/mnt/c/Users/Richard/.dnx/runtimes/dnx-clr-win-x86.1.0.0-rc1-update2/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                     
> stat("/mnt/c/Users/Richard/AppData/Local/Microsoft/WindowsApps/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                     
> stat("/mnt/c/Program Files (x86)/Microsoft VS Code/bin/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                             
> stat("/mnt/c/Users/Richard/AppData/Local/.meteor/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                   
> stat("/mnt/c/tools/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                                                 
> stat("/mnt/c/Users/Richard/AppData/Roaming/npm/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                                     
> stat("/mnt/c/Users/Richard/AppData/Local/Microsoft/WindowsApp/\r", 0x7fffdbcd7690) = -1 ENOENT (No such file or directory)                                                      
> write(2, "/mnt/c/Program Files/nodejs/npm:"..., 69/mnt/c/Program Files/nodejs/npm: 5: /mnt/c/Program Files/nodejs/npm: ) = 69                                                   
> : not found) = 122                                                                                                                                                    
> write(2, "\n", 1                                                                                                                                                                
> ) = 1                                                                                                                                                     
> write(2, "/mnt/c/Program Files/nodejs/npm:"..., 69/mnt/c/Program Files/nodejs/npm: 6: /mnt/c/Program Files/nodejs/npm: ) = 69                                                   
> write(2, "Syntax error: word unexpected (e"..., 46Syntax error: word unexpected (expecting "in")) = 46                                                                          
> write(2, "\n", 1                                                                                                                                                                
> ) = 1                                                                                                                                                     
> exit_group(2) = ?                                                                                                                                     
> +++ exited with 2 +++                                                                                                                                                           
> ```
> * Required packages and commands to install
> - NodeJS (windows)
> - `npm`

Thank you again for providing this because it got me the furthest of anything I have found up to now. I’m running!

---

## Post 21 by @strarsis — 2018-02-05T22:38:10Z

I am running Docker (Toolbox) now on WSL, so I don’t need any Virtual Machine for development right now (well, technically the Docker Toolbox uses a VM internally (boot2docker)).

Instructions:

> <https://gist.github.com/jwilson8767/00a46f5ca63327d5bfd802f87b702c8d>

Further notes:

> <https://gist.github.com/strarsis/44ded0d254066d9cb125ebbb04650d6c>

---

## Post 22 by @Log1x — 2018-02-05T22:53:19Z

I have since switched to Hackintosh and more than likely will not be upgrading this guide anytime soon.

One suggestion I do have though is to check out [valet for WSL](https://github.com/huncrys/valet-wsl) with [Acrylic DNS](http://mayakron.altervista.org/wikibase/show.php?id=AcrylicHome) instead of running Virtualbox/Hyper-V on top of an environment that already has some rather unfortunate limitations when it comes to disk performance.

---

## Post 24 by @mmirus — 2018-07-27T02:26:32Z

For anyone trying to get Browersync working, after adding your browser of choice to your Windows PATH, here’s how to specify it in Sage’s `browsersync` config (using Chrome as an example). Update this section in `webpack.config.watch.js`:

```
new BrowserSyncPlugin({
  target,
  open: config.open,
  proxyUrl: config.proxyUrl,
  watch: config.watch,
  delay: 500,
  advanced: {
    browserSync: {
      browser: "chrome.exe",
    },
  },
}),
```

---

## Post 25 by @sacredtexts — 2023-08-12T13:29:36Z

Best guide :guide_dog: I have seen anywhere on the Net! I am having all of our new staff use this guide.

Thank you :pray:
