Server-Side Swift (Vapor) on Windows 10 inside WSL
Published: 2021-03-25 07:26:35

Some of the time I am not on my iMac to be able practice on my Swift programming. I have been following Vapor for about a year now and like the work that I can do with it now in linux.
So my mission was to get it up and working in WSL on my windows machine, even though its not my favorite, its my most convenient machine (for now).

#SET UP WSL
1. Have WSL version 2 running. (Using powershell run: `wsl -l -v` to find out which version your using. If anything less than 2, research how to update wsl.

2. While in WSL you will need to get a GUI up and running. My favorite is VcXsrv. Install this on Windows, config it to `Multiple windows` and `Start no client` then save the config. You will need this to be running to get wsl apps to open up in their own windows.

3. Now for your bash config
Go back to wsl and inside your .bashrc add this to the end:
```
# set DISPLAY variable to the IP automatically assigned to WSL2
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0
```
After that command add this to .bashrc:
```
sudo /etc/init.d/dbus start &> /dev/null
```
Then you need to make sure theres no password so enter this command:
`sudo visudo -f /etc/sudoers.d/dbus`
Nano will open up and enter: 
```
<your_username> ALL = (root) NOPASSWD: /etc/init.d/dbus
```
then `ctrl-o` `enter` `ctrl=X` 

4. Test a GUI app. 
I usually run firefox first cause you gotta have a web browser to do some work in Vapor. If all of this was done correctly then you should get a linux version of firefox to pop up on the screen!

#NOW FOR SWIFT
At this time you need at least swift 5.2, but I am using 5.3.3, I think theres a new version but I havent tested that out yet.
You need to know what version of linux your running in WSL I am using ubuntu, but run `lsb_release -a` to get the exact version.
now to figure out where you want to file to go. This is pretty important! I have heard of tuts place the file in /mnt/c/swift or ~/ but dont listen to that! 
1. Just cd into /usr/local/. So go to the swift release page here: >https://swift.org/download/#releases 
copy the link address and throw it in a wget. you should have a .tar.gz file inside the file now when you run ls.
2. Now that you see this gz file (it should be red) `tar -zxvf <filename>` this will extract it and show you the progress.
3. Next part is very important!
```
echo 'export PATH=/usr/local/swift-3.1.1-RELEASE-ubuntu16.04/usr/bin:$PATH' >> .bashrc
```
then `source .bashrc`
if everything is all well then when you run `swift --version` you should get something that looks like this ```
Swift version 5.3.3 (swift-5.3.3-RELEASE)
Target: x86_64-unknown-linux-gnu
```
Now you got Swift on WSL and you got GUI apps to be able to open and run! Good Job!
You are certainly able to quit now... or dive into some new stuff... server-side swift! This is where some fun can begin!

#SET UP VAPOR!!!!!
1. As per vapor docs they recommend getting the cli toolbox, I got this in a swift folder in my dev directory. If you want to be official enter these commands:
```
git clone https://github.com/vapor/toolbox.git
cd toolbox
git checkout <desired version>
make install
```
When looking for the desire version to to the git folder here: >https://github.com/vapor/toolbox/releases
and just get the most updated one.
after using make install you will be good.
confirm with `vapor --help`
2. From here I created a vapor directory and a projects directory inside. then ran `vapor new hello -n` to create a bare bones vapor project.
3. Now the time to see if everything will work. Run `vapor run` it will start to compile. Once finished it will give the address that its server the files to. Now that you got a web browser GUI app working open up that firefox and enter the address its giving you. If all works well you should get some basic 'it works!' text up at the top! If you got this working you are officially running a swift server side webframework on windows 10 inside WSL! Congrats, it was a bit of a journey but to do from nothing its worth the work!

Let me know if you guys run into any issues, hope this helped you on your coding journey!